为什么每次点击都会多次运行此代码?

时间:2012-06-28 18:40:57

标签: javascript jquery recursion

很难弄清楚为什么在第一次点击时调用此警报代码一次,第二次点击时调用两次,第三次点击时调用四次,第四次点击时调用八次等等。

$(document).ready(function() {
    $('#preventClickDiv a[href]').click(function(e){ 
        e.preventDefault();
        alert('Prevented');
        newClick();
    });
});
function newClick(){
    $('#preventClickDiv a[href]').click(function(e){ 
        e.preventDefault();
        alert('Prevented');
        newClick();
    });
}

3 个答案:

答案 0 :(得分:7)

第一个块创建一个调用newClick的点击事件,它会创建一个调用自身的点击事件......这会创建另一个事件...我想你明白了。取出函数中的click事件绑定代码。

应该是这样的:

function newClick(){
    alert("in new click");
}

答案 1 :(得分:1)

您正在点击事件中绑定点击事件,因此每次点击时,您绑定另一个点击事件,导致大量点击事件多次绑定到同一元素点击。

答案 2 :(得分:0)

您正在做的是每次调用newClick()时注册附加点击处理程序,而不是替换旧的 - 它不会因为事件被触发而消失。就这样做:

$(document).ready(function() {
    $('#preventClickDiv a[href]').click(function(e){ 
        e.preventDefault();
        alert('Prevented');
    });
});

(另外,阻止用户点击链接是产生仇恨的好方法。)