有没有办法判断事件处理程序是否是在jQuery中使用没有自定义标志的代码触发的?
考虑一下这个jQuery代码有没有办法判断事件处理程序是否是在jQuery中使用没有自定义标志的代码触发的?,jquery,javascript-events,Jquery,Javascript Events,考虑一下这个jQuery代码 $('button#my').click(function(event) { alert('hello'); }); $('button#my').click(); 显然,这将打开一个警报窗口 但是,我是否可以判断,仅使用jQuery,事件处理程序是由代码触发的,还是用户单击了它(没有丑陋的标志检查,例如,var userClicked=true) 我原以为会有事件的属性,但我想不出来 这可能吗 谢谢。您可以检查,对于(或其他触发器)调用,将是未定义的。
$('button#my').click(function(event) {
alert('hello');
});
$('button#my').click();
显然,这将打开一个警报窗口
但是,我是否可以判断,仅使用jQuery,事件处理程序是由代码触发的,还是用户单击了它(没有丑陋的标志检查,例如,var userClicked=true
)
我原以为会有事件的属性,但我想不出来
这可能吗
谢谢。您可以检查,对于(或其他触发器)调用,将是未定义的。
,例如:
$('button#my').click(function(event) {
if(event.which) {
alert("User click");
} else {
alert("triggered click");
}
});
.我刚刚试过,它们之间有很多不同之处;使用Firebug并尝试$(“button#my”)。单击(console.log)
,您将在单击或click()
时看到记录的事件。一个是event.currentTarget
,单击时它是元素,或者document
单击时(
ed)(ed)(可能会根据调用它的范围进行更改,实验)。还有其他各种不同之处-(偏移|客户端|层)[XY]
都设置为单击,但不设置为单击()
,等等
(编辑:正如Nick所说,
event.which
是另一个;它是单击的1,而不是为click()
定义的)延迟回答。尼克的回答是可行的,但你可以用更明确一点的方式来回答
您可以使用附加参数定义.click()
,并使用.trigger('click')
而不是.click()
传递这些参数
示例:
这样,它以支持的方式使用jQuery的显式特性
// Passed via .trigger() ----------------v
$('button#my').click(function(event, wasManual) {
if( wasManual ) {
alert('triggered in code');
} else {
alert('triggered by mouse');
}
});
// Array of additional args------v
$('button#my').trigger( 'click', [true] );