检查事件是否由人触发
我有一个处理程序附加到一个事件,我希望它只能执行,如果它是由人触发,而不是由触发()方法。 我如何分辨?
例如,
$('.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
例如: http : //jsfiddle.net/wG2KY/
你可以使用onmousedown来检测鼠标点击与触发()调用。
我会考虑一下你检查鼠标位置的可能性,比如:
- 点击
- 获取鼠标位置
- 重叠button的坐标
- …
接受的答案没有为我工作。 已经6年了,从那以后,jQuery发生了很大的变化。
例如, event.originalEvent
在jQuery 1.9.x中总是返回true
。 我的意思是对象总是存在,但内容是不同的。
那些使用新版本的jQuery的人可以试试这个。 适用于Chrome,Edge,IE,Opera,FF
if ((event.originalEvent.isTrusted === true && event.originalEvent.isPrimary === undefined) || event.originalEvent.isPrimary === true) { //Hey hooman it is you }
因为你控制了所有的代码,没有外星人调用$(input).focus()
比setFocus()
。
使用全局variables对我来说是一个正确的方法。
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()
。 祝你好运或检查其他答案
- jQuery使用下一个select选项
- 如果用户当前在页面上处于活动状态,如何使用JavaScript / jQuery检测?
- 什么是file.slim.js苗条
- 检查是否存在具有某个类名称的div
- 如何在使用JSONP时捕获jQuery $ .getJSON(或$ .ajax,数据types设置为'jsonp')错误?
- 如何使用JavaScript从Web服务返回的二进制string构buildPDF文件
- jQuery插件模板 – 最佳实践,惯例,性能和内存影响
- Twitter的引导进度栏animation页面加载
- 如何使用jQuery将一行表格滚动到视图(element.scrollintoView)中?