2013-10-14 64 views
0

假設我在鏈接/按鈕/等上有一個點擊事件。YUI3:我會如何觸發事件?

var myButton = Y.one('.button'); 

myButton.on('click', function() { 
    // code 
}); 

頁面上還有其他事情發生,我想觸發此按鈕上的點擊事件。我將如何做到這一點?

我看到了YUI3的fire()方法,但它看起來像是爲自定義事件設計的。如果我應該使用fire(),那麼myButton.fire('click')會工作嗎?

(我在找jQuery的.trigger()方法,相當於其對DOM事件或自定義事件的作品。)

回答

2

你真的需要觸發按鈕上的單擊事件?以下面的HTML爲例

<button id="myButton">Click Me</button> 
<br> 
    <a href="#">Click Me</a> 

您可以使用自定義事件來將真實邏輯放置在某個中心位置。

YUI().use("node","event",function(Y){ 
    Y.one("#myButton").on("click",function(){Y.fire("custom:doThing")}); 
    Y.all("a").on("click",function(){Y.fire("custom:doThing")}); 
    Y.on("custom:doThing",function(){console.log("Do my thing, regardless of event source")}) 
}); 

小提琴:http://jsfiddle.net/WZZmR/

+0

在這種情況下,我不需要觸發按鈕上的點擊事件,並且您的想法完全有效。但是,我想知道YUI是否可以在可能無法修改代碼的情況下觸發正常的DOM事件。 YUI文檔說fire()僅適用於自定義事件。 – Stephen

3

如果您在YUI3您可以使用「模擬」

Y.one('button selector').simulate('click'); 

對於上面的語句來工作,你將需要添加嘗試尋找觸發的等價「node-event-simulate」在使用方法中彙總。

+0

謝謝,但我想模擬整個事件。 simulate()不這樣做,並不適用於面向用戶的代碼。 – Stephen

+0

是的,你是正確的,他們應該用於自動化測試。爲什麼不嘗試使用yui3中的合成事件? – Someone

+0

下面是用戶barnyr的建議。我嘗試合成/自定義事件。謝謝。 – Stephen