在jQuery中,我怎么能告诉编程和用户点击?

说我有一个点击处理程序定义:

$("#foo").click(function(e){ }); 

我怎样才能在函数处理程序中,告诉事件是以编程方式还是由用户触发?

你可以看看事件对象e 。 如果这个事件是由一个真正的点击触发的,那么在e里面就会有clientXclientYpageXpageY等东西,它们就是数字; 这些数字与触发点击时的鼠标位置有关,但即使点击是通过键盘启动的,它们也可能存在。 如果这个事件是由$x.click()触发的,那么在e就不会有通常的位置值。 您还可以查看originalEvent属性 ,如果事件来自$x.click() ,则该属性不应存在​​。

也许这样的事情:

 $("#foo").click(function(e){ if(e.hasOwnProperty('originalEvent')) // Probably a real click. else // Probably a fake click. }); 

这里有一个小沙箱玩: http : //jsfiddle.net/UtzND/

您可以使用jQuery触发器手册中所述的额外参数:

 $("#foo").click(function(e, from){ if (from == null) from = 'User'; // rest of your code }); $('#foo').trigger('click', ['Trigger']); 

还有另一个问题已经回答了。

如何检测click()是否是鼠标点击或由某些代码触发的?

使用事件对象的which属性。 代码触发的事件应该是undefined

 $("#someElem").click(function(e) { if (e.which) { // Actually clicked } else { // Triggered by code } }); 

JsFiddle示例 – http://jsfiddle.net/interdream/frw8j/

希望它有帮助!

DOM级别3指定event.isTrusted。 目前只支持IE9 +和Firefox(基于我的testing),我也读过(虽然没有深入研究),它可以在一些浏览器中被覆盖,可能还没有100%准备好实际上被信任(不幸的是)。

这是@ mu的小提琴的修改版本,适用于IE和Firefox。

不会参与智力讨论,为我过滤.trigger('click') .click().trigger('click')是 –

 $(document).on('click touchstart', '#my_target', function(e) { if (e.pageX && e.pageY) { // To check if it is not triggered by .click() or .trigger('click') //Then code goes here } });