it-swarm.dev

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.

31
Kevin Prince

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

31
MightyE

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

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

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

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

11
naugtur

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

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

1
Souvik Ghosh

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

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

0
Ukuser32