AJAX на созданные элементы JavaScript - PullRequest
0 голосов
/ 25 января 2010

возможно ли, что 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, который я использую для создания поля с дочерними элементами.

что я делаю не так?

1010 * ТНХ *

Ответы [ 2 ]

1 голос
/ 25 января 2010

Я не уверен, что полностью понимаю, но звучит так, будто вы хотите, чтобы обработчик событий onclick применялся ко всем купе с определенным классом css .element. Я прав?

Если это так, тогда просто используйте синтаксис связывания событий jQuery live () . Это позволит вам связать событие со всеми элементами dom, которые соответствуют данному селектору сейчас и в будущем.

Чтобы использовать в качестве примера собственный код:

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

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

В приведенном выше примере div, который мы добавили динамически, будет привязан к нашему событию click, так как мы использовали jquery api для его вставки.

0 голосов
/ 25 января 2010

Нет, JavaScript всегда применяется к каждому действительному элементу в DOM, независимо от того, откуда он взялся.

Я не могу пока что разобраться в вашем коде, но, может быть, ваш AJAX-вызов вводит элементы с идентификаторами, которые уже существуют в документе? Это может вызвать проблемы при попытке обратиться к этим элементам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...