有没有办法判断是否在没有自定义标志的情况下使用jQuery中的代码触发了事件处理程序?

时间:2010-11-25 01:57:45

标签: jquery javascript-events

考虑这个jQuery代码......

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

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

显然,这会打开一个警告窗口。

但是,我是否可以仅使用jQuery告诉该事件处理程序是否使用代码触发,或者用户是否单击它(没有难看的标记检查,例如var userClicked = true)。

我以为会有event的属性,但我无法理解。

这可能吗?

感谢。

3 个答案:

答案 0 :(得分:7)

您可以查看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

答案 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的显式特性。