2011-10-19 50 views
1

我有这样的jQuery代码:为什么我的警报不止一次显示?

$("div.note a").live("click", function(e) { 
    e.preventDefault(); 
    alert('test'); 
}); 
<div id="note_list"> 

<div class="note"> 
Text 1 
<a href="">X</a> 
</div> 

<div class="note"> 
Text 2 
<a href="">X</a> 
</div> 

<div class="note"> 
Text 3 
<a href="">X</a> 
</div> 

</div> 

有人能告诉我,为什么警报显示的3倍?它在Chrome中运行良好,但不在Firefox中运行。

+3

它仅出现一次对我来说:http://jsfiddle.net/ s2ZAz /' - >'如果出现问题,它就在代码中的其他地方。也许你是动态地添加元素并且每次绑定事件处理程序?然后你不明白'live'在做什么:http://api.jquery.com/live/ –

+0

可能是你分配实时事件多次times.try在分配之前解除绑定点击事件。 – sathis

+0

@sathis,是的,我使用live,因为cose被加载了.html(html_code)。为什么.live()不好?我的意思是......我必须解除事件并再次使用直播活动? – Dail

回答

2

这就是所谓的一次性,你的情况,你可以通过e.stopImmediatePropagation();

$("div.note a").live("click", function(e) { 
    e.stopImmediatePropagation(); 
    e.preventDefault(); 
    alert('test'); 
    }); 
1

停止多个事件调用试试这个

$("div.note a").die('click').live("click", function(e) { 
    e.preventDefault(); 
    alert('test'); 
}); 
+0

你不能以这种方式解除与'live'绑定的事件处理程序(如果这是你的意图)。你必须使用'die'。 –

+0

correct.thanks。 :) – sathis

+0

@sathis,你能解释一下wky我必须解除绑定然后绑定吗? – Dail