Элементы доступа JQuery в измененном DOM - PullRequest
0 голосов
/ 20 марта 2010

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

Например, у меня такая ситуация.

$.getJQUERY(myUrl, {var:value}, function(i, data){
  $.each(data.values, function(value){
      $("body").append('<div id="div_no_'+i+'">'+value+'</div>);
     // Here i dont want to place the EventListeners
  })
});
$("div_no_1").click(function(){
    // do something
});

Может ли кто-нибудь помочь мне найти способetablish что-то вроде этого ??

Заранее спасибо

Отлично

Бернхард

Ответы [ 2 ]

1 голос
/ 20 марта 2010

Вы можете использовать обработчик кликов .live(), например:

$("div[id^=div_no_]").live('click', function(){
  // do something
});

Прислушивается к кликам с существующих или новых элементов, идентификаторы которых начинаются с div_no_

Вам понадобится только один раз, это сработает для всех созданных вами div'ов.

Комментарий Джейсона также имеет большое значение для вашей ситуации, примерно так:

$.getJQUERY(myUrl, {var:value}, function(i, data){
  $.each(data.values, function(value){
      $("body").append('<div id="div_no_'+i+'" class="clickme">'+value+'</div>');
  })
});

$(".clickme").live('click', function(){
  // do something
});
0 голосов
/ 20 марта 2010

Это непоследовательный ответ Ника, который может помочь вам понять jQuery и Javascript немного больше:

$.getJQUERY(myUrl, {var:value}, function(i, data){
  $.each(data.values, function(value){
      var myDiv = document.createElement('div');
      $(myDiv).id('div_no_' + i).addClass('clickme').text(value);
      $('body').append(myDiv);
  })
});

$(".clickme").live('click', function(){
  // do something
});

Преимущество такого способа состоит в том, что он более модульный, если вы решите внести изменения / обновления в будущем. Например, если вы решили, что больше не хотите, чтобы он был div, вы можете просто изменить тип созданного элемента, скажем, на span, и это единственное изменение, которое вам нужно сделать (предоставляется в В этом примере переменная называется myDiv, но, надеюсь, вы называете свои переменные лучше, чем это :). По сути, вы не визуализируете HTML напрямую, а скорее абстрагируете его, чтобы jQuery / JS мог сделать для вас тяжелую работу.

Не пытаясь украсть гром Ника, просто приведу альтернативный, педагогический пример.

...