2011-02-23 50 views
1

有一些代碼,做這樣的順序:Dojo能夠在整個頁面中獲取所有事件嗎?

  1. 道場設定值的一個小部件,並觸發onchange事件。
  2. dojo.connect tochange上述widget的事件。

最初,我不認爲第1步的事件會被第2步中設置的事件處理程序捕獲。但是,看起來像我的假設是錯誤的。

所以我的想法它嘗試在dojo.connect之前獲取所有事件並殺死所有事件,然後dojo.connect將無法使事件處理程序捕獲先前發生的事件。

是否有可能像dojo.stopAllEvent?這樣做後,我的dojo.connect代碼將正確地忽略不必要的事件。

在此先感謝。

回答

0

雖然我不知道標題問題的答案,但我還是想知道onChange的奇怪之處。

我會假設你和你一樣,但事實證明,當你設置表單小部件的值時,onChange事件被觸發並超時。從dijit.form._FormWidget

// setTimout allows hidden value processing to run and 
// also the onChange handler can safely adjust focus, etc 
this._onChangeHandle = setTimeout(dojo.hitch(this, 
    function(){ 
     this._onChangeHandle = null; 
    this.onChange(newValue); 
    }), 0); // try to collapse multiple onChange's fired faster than can be processed 

這意味着你的第2步進行,重視第二onChange聽衆事件實際觸發之前。你可以做什麼來解決你的問題,就是使用set方法的第三個參數。

yourFormWidget.set("value", myNewValue, false); 

第三個參數叫做priorityChange,當設置爲false時,onChange事件不會被觸發。希望有所幫助。 (感謝#dojo上的kgf教我:-))

+1

不客氣:)(很高興見到你在這裏!) – 2011-02-24 03:36:13

+0

謝謝。你真的很有幫助。 – 2011-02-24 07:03:40

0

如果您的實際問題僅僅是在連接事件前如何避免從您的set調用中「聽到」更改,那麼一個潛在的答案基本上在於我告訴弗羅德他早些時候傳達了。

dijit.form._FormWidget火災onChange通過超時,這基本上確保它實際上只在當前功能鏈執行完成後觸發。因此,目前您的connect最終實際上是「贏得」對陣onChange射擊的比賽,這是您不想要的。但是,您應該能夠通過同樣在超時時間內執行實際連接來強制它「失去」。

例子:http://jsfiddle.net/kfranqueiro/ur8tf/

當然,如果弗羅德的建議足以滿足您的目的,這是對眼睛可能更容易。

+0

謝謝。你真的很有幫助。 – 2011-02-24 07:02:29

相關問題