2013-03-06 1 views
1

Мне показалось странным, что функция .on() запускает событие только один раз/два раза при загрузке ajax.Функция Jquery ON срабатывает только один или два раза только при нагрузке ajax

Вот пример кода:

$(document).on('click', '.cbxCheckAll', function(e) { 
alert(this.checked); 
$(this).parents('table').find('input.cbxDelete:checkbox').attr('checked', this.checked); 
}); 

Сценарий: Так в основном, у меня есть выпадающий список, который имеет список пользователей. После выбора пользователя в раскрывающемся списке он мгновенно загружает информацию выбранного пользователя в div через ajax. Затем в этом div у меня есть несколько флажков с опцией «выбрать все».

После нажатия кнопки «Выбрать все», все флажки были выбраны. Еще один щелчок, он снял флажки. Ну, это сработало. Но когда я снова нажимаю (третий раз), он больше не работает. Похоже, что он работает только во втором клике.

Как вы можете заметить, у меня есть alert(), который отображает значение флажка «Выбрать все». Кажется, что огонь срабатывает каждый раз, когда я нажимаю на него (3-й, 4-й и т. Д.), Но проверка/снятие флажка - нет.

Я только недавно обновил версию JQuery до последней версии (1.9). Я использовал ver (1.7) с функцией .live() и изменил его на .on(), так как .live() был удален последним.

Заранее благодарен!

+1

Обязательно используйте [ 'console.log()'] (http://stackoverflow.com/questions/4743730/what-is-console-log-and-how-do-i-use- it) вместо 'alert()' – Dom

+0

как указано @Dom, предупреждение содержит поток, console.log позволяет ему продолжать работу. –

+1

(возможно), не связанный с вашей проблемой, но «.parents ('table')" выбирает EVERY table ancestor этого элемента. Если вы попробуете «.closest (« table »), вы выберете только ближайшего предка« таблица ». – DoXicK

ответ

0

Вы должны использовать .prop() в последних версиях JQuery при работе с checkedсобственности.

$(document).on('click', '.cbxCheckAll', function(e) { 
    //alert(this.checked); 
    console.log(this.checked); 
    $(this).parents('table').find('input.cbxDelete:checkbox').prop('checked', this.checked); 
}); 
+0

Спасибо Kevin B !!! Это прекрасно работает! Просто интересно, почему мой код, указанный выше, не работает? Я использовал это с версией jquery 1.7, и он отлично работает. Но теперь, когда я обновился до 1.9, это уже не так? – basagabi

+0

Объясняет ли это, почему он работает только дважды? –

+0

Да, это причина, по которой он работает только дважды, хотя я не совсем уверен, логически, почему это происходит. 1.9 переключился обратно на более строгий .attr/.prop, который был введен в 1.6 и удален в 1.6.1. Если вы хотите изучить его, будь моим гостем, но вы будете исследовать, почему метод не работает так, как ожидалось, когда вы используете его неожиданным образом. –