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

应该很简单,但我不能让它工作,所以会欣赏任何指针。

我在我的网页中有一个function,它将一个新行添加到带有输入等的表中。这是一个非常基本的POST,看起来像这样……

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

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

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

  

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

我尝试在post的“完成”部分添加一行,然后将焦点/克拉放入新输入但它不起作用(焦点停留在先前单击以添加行的按钮上)。

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

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

还值得注意的是,我试图在添加的输入中添加自动聚焦属性,但我正在使用grails,这种类型的自动完成不允许我这样做。

谢谢!

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

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

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

从jQuery文档引用:选择器 :

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