web-dev-qa-db-ja.com

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

inputを.click()すると、イベントが発生し、liのc​​lick()が再トリガーされます。 inputに.click()を追加して_event.preventBubble=true;_を実行するか、またはclick() ingの代わりに単にcheckedプロパティを設定する必要があります。

32
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