С Новым годом! Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683

Странное поведение

24.06.2014, 12:07. Показов 1444. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, столкнулся с проблемой и никто не может сказать в чем может быть загвоздка, сам перепробовал все, что знал и что нашел в гугле, ничего не сработало. Дело в следующем, есть на странице ссылка, по клику на которую выполняется ajax запрос, который вытягивает блок формы, бок в том, что на этой форме есть такая же самая ссылка и чтобы на нее повесить событие, с этим блоком приходит этот же самый js, который вешает событие на click, в итоге получается ошибка в том, что при кликах события все навешиываются и навешиываются и потом при одном клике отрабатывает сразу N одинаковых событий. Решение очевидно, сперва снять обработчики, а затем повесть по новой.
Структура страницы:
HTML5
1
2
3
4
5
6
7
8
9
10
11
<html>
     <body>
          ....
          <a href="#" class="loginForm">Вход</a>
          <script>
                  $(".loginForm").click(function () {
                          ajax...
                  });
          </script>
     </body>
</html>
Ответ ajax
HTML5
1
2
3
4
5
6
7
8
<div>
      ....
</div>
<script>
    $(".loginForm").click(function () {
           ajax...
    });
</script>
Проблема вот в чем. Оно, втупую, отказывается снимать событие с линка! Перепробовал все способы. Вешал событие через on, через click, bind. Убивал их через off, через unbind, с параметрами и без. Получились вот какие кейсы
1.
Открыть страницу.
Нажать на ссылку = ajax.
Попытка убить с нее событие (off, unbind).
Нажать на ссылку - все равно ajax.

2.
Открыть страницу.
Убить событие off, unbind.
Нажать на ссылку - ничего. Так и надо.

3.
Открыть старницу.
Нажать на ссылку - ajax.
Добавить еще 1 обработчик на клик(console.log(1)).
Нажать на ссылку - ajax, 1.
Убить события off, unbind - все равно ajax, 1.

4.
Создал рядом еще 1 ссылку.
Открыть страницу.
Повесить на нее событие(лог(1)).
Нажать на ссылку - 1.
Убить с нее события.
Нажать - ничего.

В общем или я чего-то не догоняю, но такое чувство, что там кто-то каждую 1мс вешает его обратно, что не дает мне его убить. Может кто сталкивался с таким приколом и может объяснить в чем соль?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.06.2014, 12:07
Ответы с готовыми решениями:

Странное поведение jQuery
В общем-то есть на странице пару простых чекбоксов c одним классом - пытаюсь достать их значение по клику: ...

Странное поведение click
Добрый день! Есть динамическая таблица допустим я создаю строки номер строки значение 1 11111 2 22222 3 33333 4 44444 Если...

Странное поведение при делегировании
Доброй ночи, Господа. Пишу некую доп. функциональность к календарю, но дело, собственно, не в этом. Прописываю 2 события. Т.к....

6
 Аватар для mihalken
97 / 97 / 74
Регистрация: 15.05.2014
Сообщений: 269
Записей в блоге: 2
24.06.2014, 12:44
Цитата Сообщение от TGrey[WoLf] Посмотреть сообщение
Открыть страницу.
Нажать на ссылку = ajax.
Попытка убить с нее событие (off, unbind).
Нажать на ссылку - все равно ajax.
Я тут попробовал эмулировать ваши действия вот с таким раскладом:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var log = $( '.log' ),
    link = '<a href="#" class="loginForm">Вход</a>'
;
 
$( '.loginForm' ).on('click', function() {
    // AJAX
    $.ajax({
        url: 'submit.php',
        method: 'POST',
        success: function(data) { // это в песочнице не сработает
            log.append('(ajax) success<br />');  
            log.append(data);
        },
        error: function() { // допустим, что это положительный результат
            log.append('(ajax) error<br />'); 
            log.append(link); // выводим точно такую же ссылку
        }
    });
   
   // мы кликнули? скажем об этом
   log.append('(event) click<br />');
    
   // снимаем у всех .loginForm событие CLICK
   $( '.loginForm' ).unbind( 'click' );
    
   // и вешаем другое (с другой задачей) для примера
   $( '.loginForm' ).on('click', function() {
        // сработает только у старой ссылке .loginForm
        // у новой ссылки работать не будет
        alert('(event) click');
    })
});
HTML5
1
2
<a href="#" class="loginForm">Вход</a>
<div class="log"></div>
Цитата Сообщение от TGrey[WoLf] Посмотреть сообщение
Оно, втупую, отказывается снимать событие с линка! Перепробовал все способы.
А у меня снимается бинд. Может не так понял?
Вот ссылка на демо моего расклада: http://jsfiddle.net/mihalken/NUc6H/
Цитата Сообщение от TGrey[WoLf] Посмотреть сообщение
HTML5
1
2
3
4
5
<script>
$(".loginForm").click(function () {
   ajax...
});
</script>
Кстати в вашей структуре нет проверки на готовность документа к работе (DOM не сформирован, а вы уже вешаете бинды).
Давайте подумаем?

Добавлено через 4 минуты
Т.е. у меня получается так:
1. Страница загрузилась
2. Кликнул первый раз "Вход"
3. Выполнил AJAX
4. Снял бинд
5. Нажал на ссылку "Вход" (старую)
6. Получил alert
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
24.06.2014, 13:20  [ТС]
Вы все верно поняли и на доп. элементе у меня тоже все работает, а с этой проклятой кнопкой - нет) Проверки ready есть, просто я не весь код писал. Сейчас приложу скрины выполнения операций.






1)Структура

2)Клик по кнопке, получил ajax.

3)Добавил еще 1 событие. Кликнул, получил 2 события(ajax, 1). Попытался убить все события. Клик по кнопке, все равно 2 события. Хотя тут есть тоже прикол, если повесить событие и не жать по линку, а сразу попытаться очистить их, то потом при клике я получаю 1 событие - ajax. То есть второе оно удалило, но если его пытаться очищать уже после клика, то отказывается.
0
 Аватар для mihalken
97 / 97 / 74
Регистрация: 15.05.2014
Сообщений: 269
Записей в блоге: 2
24.06.2014, 15:26
Цитата Сообщение от TGrey[WoLf] Посмотреть сообщение
который вытягивает блок формы, бок в том, что на этой форме есть такая же самая ссылка и чтобы на нее повесить событие
TGrey[WoLf], а обязательно выводить ссылку с таким же классом (.loginForm)? Может просто дать другой класс это ссылке (.loginForm2)?
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
24.06.2014, 15:35  [ТС]
Ну в данном случае я не переходил на ссылку "Регистрация" в попапе и по этому обработчики повторно не вешались. Но они и не снимались) Проблема, как я и говорил именно со съемом сыбытий Оно то можно поменять класс и вешать на другой класс из ответа ajax, но мне уже просто любопытно, что происходит с этой ссылкой и как это побороть.
0
 Аватар для mihalken
97 / 97 / 74
Регистрация: 15.05.2014
Сообщений: 269
Записей в блоге: 2
24.06.2014, 15:40
А есть внешка? (потыкать)

Добавлено через 1 минуту
ecommerce.dev что-то не открывается.
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
24.06.2014, 17:35  [ТС]
Обана! Таки нарыл почему оно так делает, но все равно не пойму, как исправить) В ответе приходит повторно весь скрипт jQuery, идет get запрос и все) $("*").off(); уже не работает по этому линку. Видимо потому, что ставил событие один js, а снять пытается другой. Лажа.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
        $(document).ready(function() {
            $('.loginFormLink').bind('click', function() {
        console.log(1);
                $.ajax({
                    type: "POST",
                    url: 'http://dnepropetrovsk.ecommerce.dev/region/getJson',
                    data: '',
                    success: function(responce) {
                        $("body").append("<script src='http://code.jquery.com/jquery-1.11.1.js'/>");
                    },
                });
            });
        });
Таким макаром можно воспроизвести. Есть идеи, как починить?)

Добавлено через 5 минут
Ну да самый простой способ не грузить файл заново. Интересно как избежать такого поведения, что оно все перетирает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.06.2014, 17:35
Помогаю со студенческими работами здесь

Странное поведение обработчика событий
Доброго всем времени суток. Сегодня наткнулся на необъяснимую для меня штуку. Коротко: Есть картинка побитая на кучу частичек тегами area...

странное поведение $.addClass методом
вот так все работает - анимация бекграунда в топ-меню &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv=&quot;content-type&quot;...

Странное поведение вложенной функции
Добрый день! Ситуация следующая: есть табличка &lt;table border=&quot;1px&quot;&gt; &lt;thead&gt; &lt;th&gt;1&lt;/th&gt; ...

странное поведение Jquery и prompt()
Добрый день. У меня возникла довольно странная проблема с Jquery. Мне нужна была мини функция, которая принимает 2 параметра, название...

Странное поведение - ajax + php + html/css
Здравствуйте! В целом я новичек в web-программировании. Опыт буквально несколько месяцев. Делаю свой собственный сайт и для него реализовал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru