2013-07-24 2 views
0

У меня возникла проблема при работе с JSON и последующем создании структурированного контента.Выберите элемент, который только что был создан

Дело в том, что единственный HTML из панели заключается в следующем:

<div class="users"> 
      <center>loading</center> 
      <script>update_users();</script> 
     </div> 

Но после загрузки информации с JSON это заканчивается тем, что-то вроде этого:

<div class="users"> 
<p class="name">User1</p> 
<div class="detailed"> 
    <span>Entry1: value1</span> 
</div> 
</div> 

Дело в том, что , в моем случае, например, я хочу, чтобы деталь был toggle();, так как значение display:none должно быть значением по умолчанию, но JQuery не хочет выбирать это новое содержимое.

//does work 
    $(".users").click(function(){ 
      $(".users .detailed").toggle(); 
     }); 

//doesn't work 
    $(".users .name").click(function(){ 
      $(".users .detailed").toggle(); 
     }); 

Как решить проблему, из-за которой Jquery не работает, чтобы выбрать новый контент, вставленный на страницу?

+1

Вы должны применить событие click после загрузки содержимого. – Pedro3M

+0

Я думаю, что привязка обработчика '.on ('click')' будет решить эту проблему. – Praveen

+0

Когда этот js уволен? – ElmoVanKielmo

ответ

4

Для этого нового контента вам необходимо делегирование событий

$(document).on('click',".users .name",function(){ 
    $(".users .detailed").toggle(); 
}); 
0

Существует .live() метод, читать что-то об этом. я могу посоветовать вам использовать:

$.find(".users .name").click(function(){ 
      $(".users .detailed").toggle(); 
     }); 

Или вы можете связать некоторые функции с помощью .on("click", yourfunction);

+0

метод .live() устарел: 1.7, удален: 1.9 –

+0

@ user1671639 мой комментарий в нем, прочитайте первую строку ответа –

+0

Я написал, что есть такой метод, но рекомендуется использовать другой или более новый .on(). Поэтому внимательно прочитайте, прежде чем комментировать. Благодарю. – Array

0

использование on

$(document).on('click',".users .name",function(){ 
    $(".users .detailed").toggle(); 
}); 
0

Поскольку вы динамически создавать пункт .name простой .click() не будет работать Это. Вы должны использовать .on() методу

$(document.body).on('click', '.name' ,function(){ 
    $(".detailed").toggle(); 
}); 

И технически, если у вас есть более чем 1 пользователей, чем выше подход не будет работать, как он будет переключать все элементы, имеющие .detailed класс, вы должны попробовать это

$(document.body).on('click', '.name' ,function(){ 
    $(this).next().toggle(); 
}); 

EXAMPLE

0
$(".users .name").unbind(); 

отвязать затем перепривязывают

Смежные вопросы