我有一个附加到事件的处理程序,并且我希望它仅在由人触发而不是由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
我认为这样做的唯一方法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
}
当前大多数浏览器都支持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() 。
柜面你有你的所有代码,没有外来的呼叫控制$(input).focus()
比setFocus()
。
对我来说,使用全局变量是正确的方法。
var globalIsHuman = true;
$('input').on('focus', function (){
if(globalIsHuman){
console.log('hello human, come and give me a hug');
}else{
console.log('alien, get away, i hate you..');
}
globalIsHuman = true;
});
// alien set focus
function setFocus(){
globalIsHuman = false;
$('input').focus();
}
// human use mouse, finger, foot... whatever to touch the input
如果某个外星人仍然想$(input).focus()
从另一个星球打电话。祝你好运或查看其他答案
您可以使用onmousedown来检测鼠标单击与Trigger()调用。
我考虑一下您检查鼠标位置的可能性,例如:
- 请点击
- 获取鼠标位置
- 重叠按钮的坐标
- ...
本文地址:http://javascript.askforanswer.com/jianchashijianshifouyourenchufa.html
文章标签:javascript , jquery
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
文章标签:javascript , jquery
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!