由jQuery $ .get(...)加载的焦点元素

时间:2012-03-13 21:20:18

标签: javascript jquery ajax

我正在加载一个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"/>

看起来像是要聚焦的元素(在调试器中),但它没有得到焦点。知道什么是错的吗?

5 个答案:

答案 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 */
    }
  );