2013-06-03 72 views
2

我在document上設置了一個事件處理程序,正在監聽submitchange事件,並將其委託給頁面上的任何form元素。這個想法是當輸入被改變時更新服務器(因爲事件冒泡到表單),同時也允許提交整個表單。對於需要特殊處理的輸入,我有一些覆蓋,這很好(因爲它們放置在代碼中更高,我可以用.stopImmediatePropagation()阻止主事件處理程序 - 所有這些處理程序都在document上。)防止,然後重新觸發一個javascript事件?

我試圖現在要做的就是攔截對特定輸入change事件,那麼反而預防,我想重新觸發主處理器,在一些額外的數據傳遞(使用jQuery的.trigger(event, [data])語法。)

舉一個簡單的例子:http://jsfiddle.net/rrEmq/3/

我的目標是:

  • 維護委派事件(形式的動態加載,JS被加載一次)
  • 避免重複代碼
  • 避免破壞了主處理器的功能集成到單獨的函數

這第三個項目是我最初的方法,並且我明白它可以完成工作,但我很想找到一種方法來解決這個問題,而不必重寫主要處理程序。顯然,真正的啓發是,因爲一切都委託給相同的元素,並且因爲我使用的是e.target,所以我不能簡單地觸發DOM樹中更高的處理程序。

+0

你能不能只檢查是否額外的數據已經通過並採取相應的行動? –

回答

2

創建一個custom event並與額外的數據

而不是

$(this).trigger("change", data); 

呼叫

$(this).trigger("changemodified", data); 

觸發和創建此事件的處理程序。

您可以重複處理

var handleChange = function(e) { }; 

$("something").on("change", handleChange); 
$("something").on("changemodified", handleChange); 
+0

偉大的建議 - 謝謝! –

相關問題