我在YUI上工作時遇到了一個煩人的問題。如何用YUI3觸發DOM事件
我有一個主區域和一個導航塊。主區域中的元素可以通過直接單擊或單擊導航區塊中觸發主區域中相應元素的元素來激活。
事實證明,在YUI中以編程方式觸發點擊事件並不像我想象的那麼簡單。查看文檔,我發現有關如何附加和委派事件的信息令人滿意,但不知道如何調用事件。
我發現this question,但它處理創建一個新的自定義事件,而不是調用一個現有的事件。
所有其他類似的問題與使用.simulate()回答,但其實這是不兼容的原因的最佳選擇,它也建議不要被雅虎本身的客戶端使用http://yuilibrary.com/yui/docs/event/simulate.html#faking。 編輯:重新閱讀部分後,我意識到這個問題的警告是無關緊要的。
我找到了一個解決方案,通過在節點的DOM元素中調用click()命令,但這真的是最後的手段,我想知道是否有通過YUI執行的更「乾淨」的方法。
這裏是什麼,我現在在做一個例子:http://jsfiddle.net/3fso2dg8/
在這個例子中,第二個按鈕是通過使用DOM元素
Y.one('#clickme')._node.click();
觸發第一個按鈕的點擊事件結論
經過更多的代碼擺弄我意識到模擬()是大多數情況下的首選選項,但不是全部。
我需要使用的YUI vesrion(3.14)在模擬IE9及更高版本中的單擊事件時存在已知問題。由於 - 出於其他技術原因 - 我無法升級到此問題已解決的任何版本,我需要保持多平臺兼容性,我的原始解決方案仍然是最佳選擇。任何使用YUI組件的人都不會在IE上做出反應,也許你偶然發現了同樣的問題,所以這是解決它的一種方法。
.simulate()在IE 9及更高版本中顯示不一致的結果。僅僅因爲這個原因,我不能完全依靠跨平臺設計。在節點上觸發事件本身確保它可以工作。 – Gil 2014-11-03 14:16:12
我明白了,所以,最好的方法應該是使用普通的舊JS - 比如createEvent或其他東西 - 這樣我們就可以擁有IE6和更高版本的支持...如果YUI有一些跨瀏覽器的方式,但是恐怕它贏了沒有發生 - 因爲YUI幾乎是生命週期結束:( – nettutvikler 2014-11-03 15:52:59