当 .on 事件位于嵌套函数中时,Jquery 事件冒泡
Jquery event bubbling when .on event is within a nested function
我在body onload事件中有以下代码:
$.each(["#tbl_p2", "#tbl_p5", "#tbl_ukalk"], function(index,value){
$("tbody tr:not(:last)", value).find("input[type='text']:visible:last").on("blur", this, function(){
$("tbody tr:last input[type='text']:first", value).focus()
})
})
上述表(tbl_p2、tbl_p5 和 tbl_ukalk)都是在某个时候动态添加的,它们由几行组成,每行有几个文本输入。代码的目的是在每行的最后一个输入模糊时聚焦()最后一行的第一个输入。
当通过控制台应用时它可以工作,但不能通过加载,所以我知道它与冒泡有关。我尝试像这样添加"文档"...
$.each(["#tbl_p2", "#tbl_p5", "#tbl_ukalk"], function(index,value){
$("document tbody tr:not(:last)", value).find("input[type='text']:visible:last").on("blur", this, function(){
$("tbody tr:last input[type='text']:first", value).focus()
})
})
。冒泡得足够远,但这在控制台或加载中都不起作用 - 我假设是因为"文档"不是 $.each() 中给定上下文的一部分。
我也尝试做$.each(["document #tbl_p2", ...])
但这也不起作用。
编辑:添加了带有工作代码的jsfiddle。如果表是动态添加的,则不起作用。
编辑 II:使用动态添加的表更新了 jsfiddle,用于显示事件侦听器不会更新到新的表元素。
编辑三:100%工作jsfiddle,非常感谢@Rob Schmuecker(见接受的答案)
我认为这与事件委派有关,因为在您调用onload
时表尚未加载?
查看此处 http://api.jquery.com/on/有关委派事件的信息。您可能需要稍微重新格式化代码才能使其正常工作。
或者,仅当表实际加载到 DOM 中时(例如在 ajax 请求的success
回调或类似情况下),才调用代码。
编辑:这是一个正确的工作小提琴 http://jsfiddle.net/7UTBQ/3/这是正确的工作JavaScript
.JS:
$(document).on("blur", "table tr:not(tr:last-child) td:last-child input[type='text']:visible", function (event) {
console.log('blur');
$("tr:last input[type='text']:first", $(event.target).parents('table').get(0)).focus();
});
试试这个
$.each(["#tbl_p2", "#tbl_p5", "#tbl_ukalk"], function(index,value){
$("document tbody tr:not(:last) "+value).find("input[type='text']:visible:last").on("blur", this, function(){
$("tbody tr:last input[type='text']:first "+value).focus()
})
})
没有经过我这边的测试,你可以试试。.
相关文章:
- 无法在java脚本中调用图像的点击事件函数
- 如何在事件函数中访问窗口实例
- 事件函数完整日历中的多个ajax调用
- 如何使参数在事件函数中工作
- Jquery Onclick 事件函数第二次不起作用
- 宣传单:双击时不要触发点击事件函数
- Bootstrap/JQuery-单选按钮组事件函数
- 将jQuery事件函数应用于新的Knockout.js数组元素
- 防止在元素上触发新事件,直到当前事件函数在jQuery中完成
- 有没有一种方法可以将多个参数传递给主干js中的事件函数
- 用javascript更新事件函数中的全局变量
- Jquery:如何在事件函数之外获取变量
- 将参数传递给事件函数
- postMessage - 多个 postMessage 事件/函数/回调
- 多事件函数中的悬停延迟
- JavaScript 事件函数 - 在声明之前调用
- 使用 jQuery 循环设置事件函数触发器
- 暂停,直到事件/函数使用 jquery 或 JavaScript 完成
- 如何访问 jQuery 事件函数中的对象属性
- 单击事件函数未从花式盒子灯箱内触发