jquery集中关注动态内容?

时间:2010-05-17 09:25:10

标签: javascript jquery focus

在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();
    });
 });

3 个答案:

答案 0 :(得分:7)

您只能将焦点设置为可以保持焦点的元素。默认情况下,列表项不能。这就是为什么你的第一个例子失败了,不是因为它不在DOM中(DOM中的 ,这就是append所做的)

通常,您应该使用设计用于保持焦点的元素(即将焦点设置在输入而不是列表项)。您也可以(但这不是向后兼容且逻辑性较差)使用HTML5的tabindex(可能将其设置为0)。

onload无效,因为列表项不会加载外部内容。

答案 1 :(得分:2)

您可以尝试使用$(YourElement).trigger("focus")

答案 2 :(得分:0)

这是我所知道的一篇旧帖子,但解决此问题的一种简单方法是在HTML中创建文本输入并将其CSS设置为“display:none;”。在LI的click事件中,将焦点设置在此输入中并听取其按键事件。

我做到了,它就像一个魅力。