在jquery中,我将<li>
元素附加到无序列表中。
如何关注新创建的<li>
?
如果我执行以下操作:
$("ul").append('<li><input type="text" value="Hi!"></li>');
$("li:last").focus(); //doesn't work because new <li> isn't in dom yet
如上所述,焦点不起作用。
我知道jquery 1.4.2有一个live()
事件处理程序,允许你加载事件处理程序来动态添加元素,但我不确定我做错了什么:
$(document).ready(function () {
$('li').live('load', function () {
alert("hi!");
$("li:last").focus();
});
});
答案 0 :(得分:7)
您只能将焦点设置为可以保持焦点的元素。默认情况下,列表项不能。这就是为什么你的第一个例子失败了,不是因为它不在DOM中(DOM中的 ,这就是append
所做的)
通常,您应该使用设计用于保持焦点的元素(即将焦点设置在输入而不是列表项)。您也可以(但这不是向后兼容且逻辑性较差)使用HTML5的tabindex(可能将其设置为0
)。
onload
无效,因为列表项不会加载外部内容。
答案 1 :(得分:2)
您可以尝试使用$(YourElement).trigger("focus")
。
答案 2 :(得分:0)
这是我所知道的一篇旧帖子,但解决此问题的一种简单方法是在HTML中创建文本输入并将其CSS设置为“display:none;”。在LI的click事件中,将焦点设置在此输入中并听取其按键事件。
我做到了,它就像一个魅力。