请考虑以下jQuery代码:
$('button#my').click(function(event) { alert('hello'); }); $('button#my').click();
显然,这将弹出一个警报窗口。但是,如果只使用jQuery,我能否判断该事件处理程序是由代码触发的,还是用户单击了它(没有丑陋的标志检查,例如var userClicked = true)。我以为event会有一个属性,但我想不出来。这可能吗?
var userClicked = true
event
enxuqcxy1#
您可以选中event.which,对于.click()(或其他触发器)调用,它将是undefined ...例如:
event.which
.click()
undefined
$('button#my').click(function(event) { if(event.which) { alert("User click"); } else { alert("triggered click"); } });
You can give it a try here .
h9a6wy2h2#
我刚试过,它们之间有很多不同之处;我有Firebug并尝试$("button#my").click(console.log),当您单击或click()时,您将看到记录的事件。一个是event.currentTarget,它是单击时的元素,或document,当click() ed时(可能会根据调用的范围而有所更改,实验)。还有各种各样的其他差异-(offset|client|layer)[XY]都设置为点击,但不是click(),等等。(Edit:正如尼克所说,event.which是另一个;对于单击它是1,而对于click()没有定义。)
$("button#my").click(console.log)
click()
event.currentTarget
document
(offset|client|layer)[XY]
pkwftd7m3#
迟回答。尼克的回答也行,但你可以用更明确的方式回答。您可以使用其他参数定义.click(),并使用.trigger('click')而不是.click()传递这些参数。
.trigger('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的显式特性。
3条答案
按热度按时间enxuqcxy1#
您可以选中
event.which
,对于.click()
(或其他触发器)调用,它将是undefined
...例如:You can give it a try here .
h9a6wy2h2#
我刚试过,它们之间有很多不同之处;我有Firebug并尝试
$("button#my").click(console.log)
,当您单击或click()
时,您将看到记录的事件。一个是event.currentTarget
,它是单击时的元素,或document
,当click()
ed时(可能会根据调用的范围而有所更改,实验)。还有各种各样的其他差异-(offset|client|layer)[XY]
都设置为点击,但不是click()
,等等。(Edit:正如尼克所说,
event.which
是另一个;对于单击它是1,而对于click()
没有定义。)pkwftd7m3#
迟回答。尼克的回答也行,但你可以用更明确的方式回答。
您可以使用其他参数定义
.click()
,并使用.trigger('click')
而不是.click()
传递这些参数。示例:http://jsfiddle.net/patrick_dw/jWFAn/
这样,它就以受支持的方式使用了jQuery的显式特性。