2013-02-14 88 views

回答

1

是的,你可以做這樣的...

$('button').on("click", function(e){ 
    if (e.originalEvent !== undefined) { 
     // the button was actually clicked 
    } else { 
     // the button was triggered by code 
    } 
}); 
+0

與我的做法相同,Kevin B指出:在實際的DOM元素上調用'click'會欺騙它。 – 2013-02-14 15:35:43

+0

是的,我沒有意識到這一點,並在過去使用過這個。 – Archer 2013-02-14 15:37:43

1

您可以通過查看事件對象的pageXpageY財產,這將是undefined如果使用$("some selector").click();告訴,但如果發生了一些實際的鼠標點擊。例如:

(function($) { 

    $("#target").click(function(e) { 
    if (typeof e.pageX === "undefined") { 
     display("Fired programatically"); 
    } 
    else { 
     display("Fired by real click"); 
    } 
    }); 

    setTimeout(function() { 
    $("#target").click(); 
    }, 500); 

    function display(msg) { 
    $("<p>").html(String(msg)).appendTo(document.body); 
    } 

})(jQuery); 

Live Copy | Source

當然,如果有人真的非常聰明,並建立一個完整的單擊事件包括pageXpageY信息,這是行不通的,但jQuery的的$("some selector").click();默認處理沒有做到這一點。

+0

當然這不趕上'。點擊()'直接叫DOM節點(在Chrome瀏覽ATLEAST)上。 http://jsbin.com/azaday/2/edit由於缺乏上下文,我不知道這是否對這個問題很重要。 – 2013-02-14 15:32:57

+0

@KevinB:可愛,Chrome(至少)爲'pageX'和'pageY'提供'0'。但我敢打賭,我們可以在事件對象上發現不同的東西* – 2013-02-14 15:34:46