jQuery中太多的递归错误(too much recursion error in jquery)

2019-11-04 08:03发布

此代码:

$(文件)。就绪(函数(){
$( '身体')。点击(函数(EVT){
如果(evt.target.nodeName === 'A' && $(evt.target).hasClass( '交联')){
$( '一个[HREF =#2]')的触发器( '点击');
}});});

给予“太多递归”的我和错误

有人可能会认为我应该附加一个处理程序,以交联的元素。 我想这一点,但我无法得到它的工作,因为在创建交叉连接类元素的前负荷DOM。 什么才是我需要做什么来解决这个问题还是有我应该做的,以实现我想要做一个更好的主意吗?

如果你想看到错误的自己,做在搜索栏中选择狗全能的一个“d”到eataustineat.com/testfolder/类型(这是你应该注意到了“太多的递归错误”,它将移动DIV到左侧,但它会这么做很buggily。

Answer 1:

您可以使用livedelegate添加监听器以后创建的元素:

$("a.cross-link").live("click", function()
{
   $('a[href=#2]').trigger('click');
   window.location.hash = "#2";
});

然而,点击不会触发要去的URL的默认事件,所以你需要做手工。



Answer 2:

如果需要一个现有的事件元素创建文件后添加,您可以使用现场

$(document).ready(function() {
    $('.cross-link').live(function() {
        $('a[href=#2']).click(); //No cross-link class allowed on this element as it is responsible for the recursion
    });
});


Answer 3:

那么递归来自触发

$('a[href=#2]').trigger('click');

当这个元素从事件点击它扔又将由相同的代码来处理等其他事件。

这应该工作:

    $(document.ready)(function(){
      $('.cross-link').click(function(){
       #('a[href=#2').click();
});
});

同时性能方面也更加优化的一个ID添加到你的第二个链接,因为通过一个id选择比按属性选择速度更快。 如果你还想去与HREF选择和只存在一个这样的环节做的:

#('a[href=#2 :first').click();


Answer 4:

对于全球化志愿服务青年到这上面我的意见是我做到了。 我建议使用活寿...


var open = function (myObj, animationTime) {
    //do stuff
    $(myObj).unbind('click');
    $(myObj).click(function () {
        close(myObj, timer);
    });
}

var close = function (myObj, animationTime) {
    //dostuff
    //remove close click event and then rebind the click event to open
    $(myObj).unbind('click');
    $(myObj).click(function () {
        open(myObj, timer);
    });
}

$(".mySelector").click(function () {
    open($(this), timer);
});




Answer 5:

$('body').click(function(evt) {
    if(evt.target.nodeName === 'A' && $(evt.target).hasClass('cross-link')) {
        $('a[href=#2]').trigger('click');
    }
  });

你错过了elseif-else语句。



文章来源: too much recursion error in jquery