jQuery无法选择AJAX元素

时间:2009-02-07 20:01:13

标签: jquery ajax

我正在尝试选择页面加载后添加的页面元素。请参阅下面的示例前后示例。之前是页面源,之后是生成的源。出于某种原因,我无法选择任何已生成的内容。

这对我来说很奇怪,因为我很确定我以前做过这个。

感谢您的帮助。

在:

<div class="foo"></div>

后:

<div class="foo">
  <div class="bar"></div>
</div>

6 个答案:

答案 0 :(得分:6)

关于追加后绑定的所有这些评论都很有帮助。

但是如果你切换到jQuery 1.3,你可以在第一次设置页面时使用“live”而不是“bind”,然后你甚至可以在添加的元素上获得你的活动。

http://docs.jquery.com/Events/live

答案 1 :(得分:3)

当您将div附加到#auto_suggest时,您还需要绑定该事件:

$("#auto_suggest").append("<div class='off'>Blah</div>");
$("#auto_suggest div.off").hover(function() { window.alert($(this).val()); });

否则你使用jQuery 1.3。 live()功能将满足您的需求; e.g。

$("#auto_suggest div.off").live("hover", function() { window.alert($(this).val()); });

答案 2 :(得分:2)

你在创建dom元素之前绑定事件,这在我所知的范围内不起作用。相反,您可以在追加后添加绑定。可能还有其他解决方案。

答案 3 :(得分:0)

这不太可能。我想亲自看看这个来源吗?

否则尝试在Firefox / Iceweasel中使用Firebug。 Firebug是天赐之物 - 使用“控制台”选项卡 - 用于ajax密集型站点,其中“查看源”是一个不完美的解决方案。你可以这样做:

$(“。foo .bar”)

并且控制台将输出匹配元素的数量!

答案 4 :(得分:0)

好的继承代码,如果我在底部的选择器中删除div.off我得到测试警报,因为该元素不是生成源。

$(document).ready(function(){

$(“。search_container input”)。keyup(function(){

var search; 
search = $(".search_container input").val();

if (search.length > 2){

  $.ajax({
    type: "GET", 
    url: "http://localhost:8080/search.xml",
    data: "zoom_query=" + search + "&zoom_xml=1",
    dataType: "xml",
    success: function(xml){

      $("#auto_suggest").empty(); 
      $("#auto_suggest").show();

      var _title = "";
      var _link = "";

      $("item", xml).each(function(){

        _title = $("title", this).text();
        _link = $("link", this).text();
        _context = $("zoom\\:context", this).text();

        if ($(this).length > 0){

          message = "<div class=\"off\">";
          message += "<div title='" + _context + "'>" + _title + "</div>";
          message += "<small>" + _link + "</small>";
          message += "</div>";

          $("#auto_suggest").append(message); 

        }
        else {

          $("#auto_suggest").hide();

        }

      });

    }

  });

}
else {

  $("#auto_suggest").hide();

};

});

$(“#auto_suggest div.off”)。hover(function(){

  alert('test');

});

});

答案 5 :(得分:-1)

您需要仔细检查所有代码。 jQuery可以访问DOM的所有部分,无论它们是静态还是动态存在。

我们需要查看JavaScript以帮助您进一步排查问题。