假设我定义了一个点击处理程序:
$("#foo").click(function(e){
});
Run Code Online (Sandbox Code Playgroud)
我怎样才能在函数处理程序中判断事件是以编程方式触发还是由用户触发?
mu *_*ort 113
您可以查看事件对象e.如果该事件是由一个真实的点击触发的,你必须之类的东西clientX,clientY,pageX,pageY,等内e,他们将是数字; 这些数字与触发点击时的鼠标位置有关,但即使点击是通过键盘启动的,它们也可能存在.如果事件被触发,$x.click()那么你将没有通常的位置值e.您还可以查看该originalEvent属性,如果事件来自该属性,则不应该存在$x.click().
也许是这样的:
$("#foo").click(function(e){
if(e.hasOwnProperty('originalEvent'))
// Probably a real click.
else
// Probably a fake click.
});
Run Code Online (Sandbox Code Playgroud)
这里有一个小沙箱可以玩:http://jsfiddle.net/UtzND/
Shi*_*ryu 43
您可以使用jQuery触发器手册中所述的额外参数:
$("#foo").click(function(e, from){
if (from == null)
from = 'User';
// rest of your code
});
$('#foo').trigger('click', ['Trigger']);
Run Code Online (Sandbox Code Playgroud)
还有另一个问题已经回答了.
使用which事件对象的属性.它应该是undefined代码触发的事件
$("#someElem").click(function(e) {
if (e.which) {
// Actually clicked
} else {
// Triggered by code
}
});
Run Code Online (Sandbox Code Playgroud)
JsFiddle示例 - http://jsfiddle.net/interdream/frw8j/
希望能帮助到你!
我已经尝试了上述所有解决方案。在我的情况下没有任何效果。以下解决方案对我有用。希望它也能帮助你。
$(document).ready(function(){
//calling click event programmatically
$("#chk1").trigger("click");
});
$(document).on('click','input[type=checkbox]',function(e) {
if(e.originalEvent.isTrusted==true){
alert("human click");
}
else{
alert("programmatically click");
}
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js">
</script>
<input type="checkbox" id="chk1" name="chk1" >Chk1</input>
<input type="checkbox" id="chk2" name="chk2" >Chk2</input>
<input type="checkbox" id="chk3" name="chk3" >Chk3</input>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19044 次 |
| 最近记录: |