有没有办法判断事件处理程序是否是由jQuery中没有自定义标志的代码触发的?

piv4azn7  于 2022-12-18  发布在  jQuery
关注(0)|答案(3)|浏览(89)

请考虑以下jQuery代码:

$('button#my').click(function(event) {
    alert('hello');
});

$('button#my').click();

显然,这将弹出一个警报窗口。
但是,如果只使用jQuery,我能否判断该事件处理程序是由代码触发的,还是用户单击了它(没有丑陋的标志检查,例如var userClicked = true)。
我以为event会有一个属性,但我想不出来。
这可能吗?

enxuqcxy

enxuqcxy1#

您可以选中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 .

h9a6wy2h

h9a6wy2h2#

我刚试过,它们之间有很多不同之处;我有Firebug并尝试$("button#my").click(console.log),当您单击或click()时,您将看到记录的事件。一个是event.currentTarget,它是单击时的元素,或document,当click() ed时(可能会根据调用的范围而有所更改,实验)。还有各种各样的其他差异-(offset|client|layer)[XY]都设置为点击,但不是click(),等等。
(Edit:正如尼克所说,event.which是另一个;对于单击它是1,而对于click()没有定义。)

pkwftd7m

pkwftd7m3#

迟回答。尼克的回答也行,但你可以用更明确的方式回答。
您可以使用其他参数定义.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的显式特性。

相关问题