Ответ 1
когда вы .click() дочерний элемент input
, событие пузырится и снова запускает li
click(). Вам нужно добавить .click() в input
и сделать event.preventBubble=true;
в нем, иначе просто установите свойство checked вместо click()
ing.
Я пытаюсь выбрать радио-ящик, когда я нажимаю LI. Но я получаю ошибку "для большей рекурсии".
Код:
$('li').click( function(){
$('li.selected').removeClass('selected');
$(this).addClass('selected');
$(this).children("input[type=radio]").click();
});
Это использование jQuery 1.4.2 и UI 1.7.2.
когда вы .click() дочерний элемент input
, событие пузырится и снова запускает li
click(). Вам нужно добавить .click() в input
и сделать event.preventBubble=true;
в нем, иначе просто установите свойство checked вместо click()
ing.
Да, это событие пузырится. Событие пузырится до li
Вам просто нужно сделать это:
$('li').click( function(e){
if($(e.target).is('li')){
$('li.selected').removeClass('selected');
$(this).addClass('selected');
$(this).children("input[type=radio]").click();
}
});
Не добавляйте больше событий ниже, это беспорядочно
Как общий ответ - проблема заключается в том, что jquery имеет слишком много работы, чтобы сделать - то есть цикл через элементы и т.д. У меня была эта проблема, и когда я проверил страницу в firebug, было слишком много элементов, которые я ожидал от jquery решать.
В firefox Javascript-отладчике вы можете нажать кнопку > рядом с ошибкой, и это даст вам более подробную информацию о том, что вызывает его.
На всякий случай это помогает кому-либо, это сообщение может появляться по разным причинам, как описано другими участниками, это может быть случай Even bubble. Но для меня это был ошибка в моем коде, которая привела к бесконечному вызову функции. Функция вызывала себя, которая снова вызывала себя, другими словами - бесконечная рекурсия.
Итак, просто просмотрите свой код и посмотрите, есть ли ситуация, когда jQuery попадает в бесконечный цикл вызова некоторого блока.