在jQuery中,我怎么能告诉编程和用户点击?
说我有一个点击处理程序定义:
$("#foo").click(function(e){ });
我怎样才能在函数处理程序中,告诉事件是以编程方式还是由用户触发?
你可以看看事件对象e
。 如果这个事件是由一个真正的点击触发的,那么在e
里面就会有clientX
, clientY
, pageX
, pageY
等东西,它们就是数字; 这些数字与触发点击时的鼠标位置有关,但即使点击是通过键盘启动的,它们也可能存在。 如果这个事件是由$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 } });