我正在加载一个html片段,将其插入某个元素之后,并希望将一个输入字段与类.focus
一起聚焦。这个类可能有多个元素。 Similar code with load(...)
works
var item = $(this).closest(".something");
$.get(
url,
function(data) {
item.after(data);
$(data).find(".focus").focus(); /* everything works except this line */
}
);
加载的html的相关部分:
<input type="text" class="focus" value="" name="email"/>
看起来像是要聚焦的元素(在调试器中),但它没有得到焦点。知道什么是错的吗?
答案 0 :(得分:5)
item.after(data)
将data
解析为一组DOM元素并将它们放入您的文档中。
$(data)
然后将data
解析为另一个 DOM元素集,这些元素永远不会显示。
你想要
$(data).insertAfter(item).find(".focus").focus();
答案 1 :(得分:2)
这是因为data
在DOM中不是。
试试这个:
var item = $(this).closest(".something");
$.get(
url,
function(data) {
var $data = $(data);
item.after($data);
$data.find(".focus").focus(); /* everything works except this line */
//or you can do: $(".focus", $data).focus();
}
);
答案 2 :(得分:0)
尝试,
item.next().find(".focus").focus();
答案 3 :(得分:0)
尝试使用item.next().find('.focus').focus()
。在Ajax回调中,data
不是jQuery对象,而是HTML字符串;调用item.after()
会使jQuery从HTML创建DOM节点,但它们没有链接到您的data
变量。
答案 4 :(得分:0)
这是因为你没有在添加到dom中的元素上调用focus()
。
试试这个。
var item = $(this).closest(".something");
$.get(
url,
function(data) {
item.after(data);
item.nextAll(".focus").focus(); /* everything works except this line */
}
);