我有一个附加到事件的处理程序,我希望它仅在由人触发而不是由 trigger() 方法触发时才执行。我如何区分?
例如,
$('.checkbox').change(function(e){
if (e.isHuman())
{
alert ('human');
}
});
$('.checkbox').trigger('change'); //doesn't alert
我有一个附加到事件的处理程序,我希望它仅在由人触发而不是由 trigger() 方法触发时才执行。我如何区分?
例如,
$('.checkbox').change(function(e){
if (e.isHuman())
{
alert ('human');
}
});
$('.checkbox').trigger('change'); //doesn't alert
您可以检查e.originalEvent
:如果它被定义点击是人类:
看小提琴http://jsfiddle.net/Uf8Wv/
$('.checkbox').change(function(e){
if (e.originalEvent !== undefined)
{
alert ('human');
}
});
我在小提琴中的例子:
<input type='checkbox' id='try' >try
<button id='click'>Click</button>
$("#try").click(function(event) {
if (event.originalEvent === undefined) {
alert('not human')
} else {
alert(' human');
}
});
$('#click').click(function(event) {
$("#try").click();
});
比上面更直接的是:
$('.checkbox').change(function(e){
if (e.isTrigger)
{
alert ('not a human');
}
});
$('.checkbox').trigger('change'); //doesn't alert
目前大多数浏览器都支持event.isTrusted:
if (e.isTrusted) {
/* The event is trusted: event was generated by a user action */
} else {
/* The event is not trusted */
}
从文档:
所述isTrusted只读的属性
Event
接口是一个Boolean
是真时由用户操作生成的事件,并且虚假 事件创建或修改在由脚本或者经由调度 EventTarget.dispatchEvent() 。
我认为这样做的唯一方法trigger
是根据文档在调用中传递一个附加参数。
$('.checkbox').change(function(e, isTriggered){
if (!isTriggered)
{
alert ('human');
}
});
$('.checkbox').trigger('change', [true]); //doesn't alert
接受的答案对我不起作用。6 年过去了,jQuery 从那时起发生了很大的变化。
例如,event.originalEvent
总是true
使用 jQuery 1.9.x返回。我的意思是对象总是存在但内容不同。
那些使用较新版本 jQuery 的人可以试试这个。适用于 Chrome、Edge、IE、Opera、FF
if ((event.originalEvent.isTrusted === true && event.originalEvent.isPrimary === undefined) || event.originalEvent.isPrimary === true) {
//Hey hooman it is you
}