我想在我的文件更改事件中使用委托功能,但我没有运气.这是我正在尝试做的事情:
$("#file").delegate("change", function() {
$("#submit_form").trigger('click');
});
Run Code Online (Sandbox Code Playgroud)
我的变更事件没有被调用...我是否遗漏了某些内容,或者我是否可以将委托与变更事件一起使用?
Rig*_*red 14
.delegate() 需要一个表示目标元素的选择器.
$("#file").delegate('.selector_of_element_to_watch', "change", function() {
$("#submit_form").trigger('click');
});
Run Code Online (Sandbox Code Playgroud)
如果#file元素是应该触发更改事件的元素,则不要使用.delegate.
$("#file").bind("change", function() {
$("#submit_form").trigger('click');
});
Run Code Online (Sandbox Code Playgroud)
原因是委托处理程序放在应该触发事件的元素的祖先上.然后,您提供该元素的选择器.
页面上的事件冒泡.这意味着事件将从实际触发事件的元素传播到一直到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');
});
Run Code Online (Sandbox Code Playgroud)
或直接绑定:
$("#file").on( "change", function() {
// Run if '#file' itself, or ANY of its descendants triggered the event
$("#submit_form").trigger('click');
});
Run Code Online (Sandbox Code Playgroud)
(不知道什么类型的元素#file,它可能不会/不能'有后代.如果是这种情况,那么显然事件委派不是正确的解决方案.)
这比它们旧的bind/live/delegate API 有了很大的改进,应该是从一开始就是这样做的.
| 归档时间: |
|
| 查看次数: |
12726 次 |
| 最近记录: |