Подтвердить что ты не робот

JQuery слишком много рекурсии

Я пытаюсь выбрать радио-ящик, когда я нажимаю 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.

4b9b3361

Ответ 1

когда вы .click() дочерний элемент input, событие пузырится и снова запускает li click(). Вам нужно добавить .click() в input и сделать event.preventBubble=true; в нем, иначе просто установите свойство checked вместо click() ing.

Ответ 2

Да, это событие пузырится. Событие пузырится до li

Вам просто нужно сделать это:

$('li').click( function(e){
  if($(e.target).is('li')){
     $('li.selected').removeClass('selected');
     $(this).addClass('selected');
     $(this).children("input[type=radio]").click();
  }
});

Не добавляйте больше событий ниже, это беспорядочно

Ответ 3

Как общий ответ - проблема заключается в том, что jquery имеет слишком много работы, чтобы сделать - то есть цикл через элементы и т.д. У меня была эта проблема, и когда я проверил страницу в firebug, было слишком много элементов, которые я ожидал от jquery решать.

В firefox Javascript-отладчике вы можете нажать кнопку > рядом с ошибкой, и это даст вам более подробную информацию о том, что вызывает его.

Ответ 4

На всякий случай это помогает кому-либо, это сообщение может появляться по разным причинам, как описано другими участниками, это может быть случай Even bubble. Но для меня это был ошибка в моем коде, которая привела к бесконечному вызову функции. Функция вызывала себя, которая снова вызывала себя, другими словами - бесконечная рекурсия.

Итак, просто просмотрите свой код и посмотрите, есть ли ситуация, когда jQuery попадает в бесконечный цикл вызова некоторого блока.