通过javascript自动对焦新添加的元素

时间:2014-05-08 08:18:15

标签: javascript jquery html

这个应该很简单,但是我无法让它工作,所以会很感激任何指针。

我的网页中有一个功能,可以在输入的表格中添加一个新行。这是一个非常基本的POST,看起来像这样......

$.post(url, {
    newRow : newRow
}, function(data) {
    $('#' + tableName + ' > tbody > tr').eq(rowLoc).before(data);
}).done(function() {
    reNumberTableIDName($tb)
});

reNumberTableIDName函数非常简单,它遍历表中的所有对象并更改其id / name,以便它们与其在表中的行相关,以用于其他原因。

现在,添加到此表中的一个元素是自动完成输入,看起来像这样......

<input id="autoLook[9]" class="required yui-ac-input" type="text" title="" value="" name="autoLook[9].id" style="width:500px" autocomplete="off" required="required">

请注意,作为reNumberTableIDName函数的一部分,名称和ID 已更改。

我尝试在帖子中添加一行,然后将焦点/克拉放入新输入中,但它不起作用(焦点停留在之前点击的按钮上)添加行。)

$("#autoLook[" + (newRow -1) + "]").focus();

我已经检查过"#autoLook[" + (newRow -1) + "]"确实提出了正确字符串的警告,所以我不知道为什么这不起作用。我错过了什么明显的谎言?

还值得注意的是,我尝试在添加的输入中添加自动对焦属性,但我在grails中工作,这种类型的自动完成并不允许我这样做。

谢谢!

值得注意的是,解决方案应该是如下所述使用setTimeout,否则它会不断地将焦点放回到对象中!

1 个答案:

答案 0 :(得分:2)

选择器#autoLook[9]匹配ID为autoLook且属性为9的元素;这显然是错的。在方括号周围添加反斜杠以逃避它们:

$("#autoLook\\[" + (newRow - 1) + "\\]").focus();

引自jQuery Documentation: Selectors

  

使用任何元字符(例如    !"#$%&'()*+,./:;<=>?@[\]^``{|}~ )作为名称的文字部分,它   必须使用两个反斜杠进行转义: \\ 。例如,一个    id="foo.bar" 的元素可以使用选择器 $("#foo\\.bar") 。   W3C CSS规范包含有关的完整规则   有效的CSS选择器。同样有用的是Mathias Bynens的博客文章   关于标识符的CSS字符转义序列。