【问题标题】:jQuery too much recursionjQuery太多递归
【发布时间】:2010-02-23 17:12:22
【问题描述】:

当我单击 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。

【问题讨论】:

    标签: jquery jquery-ui recursion


    【解决方案1】:

    当您 .click() 子 input 时,事件会冒泡并重新触发 li 的 click()。您需要将 .click() 添加到 input 并在其中执行 event.preventBubble=true; ,否则只需设置选中的属性而不是 click()ing 它。

    【讨论】:

    • is [Break On This Error] ...;d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f= e++,g=x;typeof b=="string"&&!l... 由此处描述的同一事件引起?
    【解决方案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 陷入调用某个块的永无止境的循环的情况。

      【讨论】:

        【解决方案4】:

        作为一个通用答案 - 问题似乎是 jquery 有太多工作要做 - 即循环遍历元素等。我遇到了这个问题,当我在 firebug 中检查页面时,我期待 jquery 的元素太多解决。

        在 firefox Javascript 调试器中,您可以单击错误旁边的 >,它将为您提供有关触发它的更多详细信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-03
          • 2011-08-24
          • 2016-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多