假设我定义了一个click处理程序:
$("#foo").click(function(e){
});
如何在函数处理程序中判断事件是以编程方式激发的,还是由用户激发的?
发布于 2011-07-13 14:16:51
您可以查看事件对象e
。如果事件是由真正的单击触发的,那么在e
中会有类似clientX
、clientY
、pageX
、pageY
等的内容,它们将是数字;这些数字与触发单击时的鼠标位置有关,但即使单击是通过键盘启动的,它们也可能会出现。如果事件是由$x.click()
触发的,那么在e
中就不会有通常的位置值。你也可以看看originalEvent
property,如果事件来自$x.click()
,它就不应该出现在那里。
可能是这样的:
$("#foo").click(function(e){
if(e.hasOwnProperty('originalEvent'))
// Probably a real click.
else
// Probably a fake click.
});
这是一个可以使用的小沙箱:http://jsfiddle.net/UtzND/
发布于 2011-07-13 14:07:34
您可以使用jQuery trigger manual中所述的额外参数
$("#foo").click(function(e, from){
if (from == null)
from = 'User';
// rest of your code
});
$('#foo').trigger('click', ['Trigger']);
发布于 2014-06-13 21:19:33
还有另一个问题已经得到了回答。
How to detect if a click() is a mouse click or triggered by some code?
使用事件对象的which
属性。对于代码触发的事件,它应为undefined
$("#someElem").click(function(e) {
if (e.which) {
// Actually clicked
} else {
// Triggered by code
}
});
JsFiddle示例- http://jsfiddle.net/interdream/frw8j/
希望它能帮上忙!
https://stackoverflow.com/questions/6674669
复制相似问题