2012-06-28 59 views
0

有一个很难在第2点击弄清楚为什么此警报代码被1日点击调用一次,两次,3日点击四次,4日点击等八次......为什么这个代码每次点击都会运行多次?

$(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(); 
    }); 
} 
+1

什么的'newClick()'的原因是什么?只需完全删除它。 – millimoose

回答

7

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

应该仅仅是这样的:

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

无限!超越!! – Logard

+0

对不起,这是一个可怕的问题。我遇到了一个问题,我并没有调用警报,而是运行了一些ajax,它返回了一组未响应点击的新链接以防止默认值。我找到了jQuery的.live功能,这已经解决了我的问题。再次抱歉! –

+0

不用担心。然而,'.live()'方法已被弃用(从1.7开始)。您应该使用['.delegate()'](http://api.jquery.com/delegate/)。 – sachleen

1

你要绑定一个click事件的单击事件中,这样,每一次点击,你绑定另一个click事件,造成了大量的点击每次点击多次绑定到相同元素的事件。

0

你在做什么是注册一个额外点击处理程序每​​次newClick()被调用,而不是取代旧的 - 它不会因为事件被解雇而消失。只是这样做:

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

(同样,阻止用户点击链接是产生仇恨的好办法。)

相关问题