javascript上的ajax创建了元素

时间:2010-01-25 16:07:59

标签: javascript ajax jquery

有可能javascript不适用于通过ajax请求创建的元素吗? 实际上,我有一个像父母和孩子一样的元素树,有更多层次的部门。

我在索引页面上有根元素,点击后我可以通过此请求检索孩子:

var get_children = function() {
 pid = $(this).attr("id");
 //var parentid = pid
    // store value in data variable
    var data = { par: pid };
    $.getJSON("/holz/children/",data,
        function(data){
      //remove the box if it already exists
      $("#parid-" + pid ).remove();
            // Add the messages div to the container
            $("#container").append("<div class='box' id='parid-" + pid + "'></div>");
            //create the id set for the box
            boxid = "#parid-"+pid
            //insert the elements one after each other with the id set to the elements pk  
            $.each(data, function(i,item){
                $(boxid).append('<p><a '+'id="'+item.pk+'"'+' class="element" href="#">'+item.fields.title +' ( id = '+ item.pk+' )'+'</a>'+'</p>');
            });
        }
    );
  return false;
};

问题是我无法深入,因为请求最适用于我从第一个请求获得的元素。 ajax请求调用一个django视图,该视图应该(并且它在第一个元素上执行)并返回一个json响应,我用它来创建一个包含子项的框。

我做错了什么?

THX

2 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解,但听起来你想要一个onclick事件处理程序应用于具有某个css类.element的所有内部元素。我是对的吗?

如果是,则只需use jQuery's live() event binder语法。这将允许您将事件绑定到现在和将来与给定选择器匹配的所有dom元素。

使用您自己的一些代码作为示例:

$('div.box').live('click', function() {
    alert('you clicked me!');
});

$("#container").append("<div class='box' id='parid-" + 1 + "'></div>");

在上面的示例中,我们动态添加的div将我们的click事件绑定到它,因为我们使用jquery api来插入它。

答案 1 :(得分:0)

不,JavaScript总是适用于DOM中的每个有效元素,无论它来自何处。

我的代码还没有多大意义,但是你的AJAX调用可能是注入了文档中已经存在的ID的元素吗? 那个在尝试解决这些元素时会造成麻烦。