我注意到jQuery中的live()函数有一个奇怪的行为:
<a href="#" id="normal">normal</a> <a href="#" id="live">live</a> $('#normal').click(clickHandler); $('#live').live('click',clickHandler); function clickHandler() { alert("Clicked"); return false; }
直到你右键单击“直播”链接并且它触发处理程序,然后才显示上下文菜单,这很好.在“正常”链接上,事件处理程序根本不起作用(如预期).
我已经能够通过将处理程序更改为这个来解决它:
function clickHandler(e) { if (e.button != 0) return true; // normal handler code here return false; }
但是,对于所有的事件处理程序来说,这真的很麻烦.有什么更好的方法让事件处理程序只像普通的点击处理程序一样发火吗?
解决方法
这是一个
known issue:
It seems like Firefox does not fire a
click event for the element on a
right-click,although it fires a
mousedown and mouseup. However,it
does fire a click event ondocument
! Since.live
catches
events at the document level,it sees
the click event for the element even
though the element itself does not. If
you use an event like mouseup,both
thep
element and thedocument
will see the event.
您的解决方法是您现在可以做的最好的.它似乎只影响Firefox(我相信它实际上是Firefox中的一个bug,而不是jQuery本身).
另见this question昨天问.