我想使用委託函數與我的文件更改事件,但我沒有任何運氣。這裏是我想要做的事:問題與jquery委託和更改事件
$("#file").delegate("change", function() {
$("#submit_form").trigger('click');
});
我改變事件不會得到所謂的......我思念的東西或我可以不改變事件中使用委託?
我想使用委託函數與我的文件更改事件,但我沒有任何運氣。這裏是我想要做的事:問題與jquery委託和更改事件
$("#file").delegate("change", function() {
$("#submit_form").trigger('click');
});
我改變事件不會得到所謂的......我思念的東西或我可以不改變事件中使用委託?
.delegate()
需要代表目標元素的選擇器。
$("#file").delegate('.selector_of_element_to_watch', "change", function() {
$("#submit_form").trigger('click');
});
如果#file
元素是應觸發更改事件的一個,那麼就不要使用.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
是的,它可能是它沒有/俊男繁衍後代如果是這樣的話,那麼很明顯,事件代表團不妥善解決。)
這是大爲改善在他們綁定/現場/委託的舊的API,並且應該是如何從一開始就做了。
+1爲非常詳細的答案。 –