考虑这个jQuery代码......
$('button#my').click(function(event) {
alert('hello');
});
$('button#my').click();
显然,这会打开一个警告窗口。
但是,我是否可以仅使用jQuery告诉该事件处理程序是否使用代码触发,或者用户是否单击它(没有难看的标记检查,例如var userClicked = true
)。
我以为会有event
的属性,但我无法理解。
这可能吗?
感谢。
答案 0 :(得分:7)
您可以查看event.which
,.click()
(或其他触发器)调用undefined
...例如:
$('button#my').click(function(event) {
if(event.which) {
alert("User click");
} else {
alert("triggered click");
}
});
答案 1 :(得分:1)
我刚试了一下,它们之间有很多不同之处;有Firebug并尝试$("button#my").click(console.log)
,当您点击或click()
时,您会看到记录的事件。一个是event.currentTarget
,它是点击时的元素,或document
click()
时(可能会根据调用的范围进行更改,实验)。还存在各种其他差异 - (offset|client|layer)[XY]
都设置为点击但不是click()
等等。
(编辑:正如尼克所说,event.which
是另一个;点击是1,而click()
没有定义。)
答案 2 :(得分:1)
迟到的答案。尼克的回答是可行的,但你可以用更明确的方式来做。
您可以使用其他参数定义.click()
,并使用.trigger('click')
代替.click()
传递这些参数。
示例: http://jsfiddle.net/patrick_dw/jWFAn/
// 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] );
这种方式是以支持的方式使用jQuery的显式特性。