[英]issue with jquery delegate and change event
我想在我的文件更改事件中使用委托功能,但我沒有運氣。 這是我正在嘗試做的事情:
$("#file").delegate("change", function() {
$("#submit_form").trigger('click');
});
我的變更事件沒有被調用...我是否遺漏了某些內容,或者我是否可以將委托與變更事件一起使用?
.delegate()
需要一個表示目標元素的選擇器。
$("#file").delegate('.selector_of_element_to_watch', "change", function() {
$("#submit_form").trigger('click');
});
如果#file
元素是應該觸發change事件的元素,那么不要使用.delegate
。
$("#file").bind("change", function() {
$("#submit_form").trigger('click');
});
原因是委托處理程序放置在應該觸發事件的元素的祖先上。 然后,您提供該元素的選擇器。
頁面上的事件冒泡。 這意味着事件將從實際觸發事件的元素傳播到window
,嘗試在整個過程中觸發每個元素的處理程序。
當到達綁定委托處理程序的祖先時,它將測試事件以查看最初觸發事件的元素是否與選擇器匹配。 如果是這樣,它將運行您的代碼。 如果沒有,什么都不會發生。
在jQuery 1.7
或更高版本中執行事件委托的方法是使用on
方法。
此方法允許您直接綁定到元素或為委派提供選擇器。
代表團:
$("#file").on( "change", '.selector_of_element_to_watch', function() {
// Run if a descendant of '#file' that matches the selector
// '.selector_of_element_to_watch' triggered the event
$("#submit_form").trigger('click');
});
或直接綁定:
$("#file").on( "change", function() {
// Run if '#file' itself, or ANY of its descendants triggered the event
$("#submit_form").trigger('click');
});
(不知道#file
是什么類型的元素,它可能不會/不能有后代。如果是這種情況,那么顯然事件委派不是正確的解決方案。)
這比它們舊的bind / live / delegate API 有了很大的改進 ,應該是從一開始就完成的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.