0

我在正文 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)都是在某个点动态添加的,它们由几行组成,每行有几个文本输入。代码的目的是在任何一行的最后一个输入模糊时聚焦()最后一行的第一个输入。

它在通过控制台应用时有效,但不是通过 onload,所以我知道它与冒泡有关。我试过像这样添加“文档”......

$.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()
    })
})

...冒出足够远的地方,但这在控制台或 onload 中都不起作用——我假设因为“文档”不是 $.each() 中给定上下文的一部分。

我也尝试过,$.each(["document #tbl_p2", ...])但这也不起作用。

编辑:添加了带有工作代码的jsfiddle 。如果表格是动态添加的,它将无法正常工作。

编辑二:使用动态添加的表更新了 jsfiddle,这表明事件侦听器不会更新到新的表元素。

编辑 III:100% 工作jsfiddle,非常感谢@Rob Schmuecker(见接受的答案)

4

2 回答 2

1

我认为这与事件委托有关,因为在您调用时尚未加载表格onload

看看这里http://api.jquery.com/on/关于委派你的活动。您可能需要稍微重新格式化您的代码才能使其正常工作。

或者,仅当表实际加载到 DOM 中时才调用您的代码,例如在successajax 请求或类似的回调中。

编辑:这是一个正确的工作小提琴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();
});
于 2013-10-28T08:20:39.507 回答
0

尝试这个

$.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()
    })
})

没有经过我这边测试你可以试试..

于 2013-10-28T08:20:44.013 回答