簡體   English   中英

jquery委托和更改事件的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM