jQuery Live() не работает

#javascript #jquery

#javascript #jquery ( jquery )

Вопрос:

Привет, по какой-то причине моя функция live() не работает. я хочу добавить элемент mew li с функцией click, нажав на элемент li внутри ulAllApps. новый элемент li, созданный внутри ulMyApps, но без функции click.

HTML:

 <div class="MyApps" >
  <ul class="ulMyApps">   
       <li class="MYLinkTR">app1</li>
   </ul>     
</div>
<div class="AllApps">
   <ul class="ulAllApps"> 
       <li class="IECLinkTR">app1</li>
       <li class="IECLinkTR">app2</li>
   </ul>
</div>
  

Код jQuery:

 $(document).ready(function () {

$(".IECLinkTR").click(function () { 
    var tmp = $(this).html();
    $.ajax({
        type: "POST",
        url: window.location.href "/addToMyLinks",
        data: "{'app': '"   tmp    "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
           $(".ulMyApps").append("<li class="MYLinkTR">"  tmp  "</li>");
        },
        error: function (msg) {
           alert("You have already have that app");                 
        }
    }); 
});

$(".MYLinkTR").live('click', function () {
    var tmp = $(this);
    $.ajax({
        type: "POST",
        url: window.location.href   "/removeFromMyLinks",
        data: "{'app': '"   $(this).html()   "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            tmp.closest('li').remove();
        },
        error: function (msg) {
        }
    });
});
});
  

по какой-то причине новый элемент li, созданный динамически, не имеет функции щелчка, исходящей из функции Live……

Комментарии:

1. вы получаете какую-либо ошибку, пожалуйста, проверьте консоль ошибок

Ответ №1:

Все, что я вижу, это то, что в вашей функции MYLinkTR click вы пытаетесь удалить tmp.closest(‘li’) . Теперь, просматривая документы, я думаю, что ближе всего двигаться вверх по DOM в поисках ближайшего next (‘li’), а не того, на котором он находится. Вы уверены, что не хотите tmp.remove() ?

Возможно, сначала нужно посмотреть, выдается ли предупреждение при нажатии, чтобы увидеть, срабатывает ли оно, поскольку вы ничего не делаете при ошибке. Здесь может происходить что-то, о чем вы не знаете. Другие варианты — изменить LIVE на делегирование и присоединить это к ul и посмотреть, сработает ли это

  $('ul.MyApps').delegate('li', 'click', function(e){
       alert('does this at least fire');
  });
  

Комментарии:

1. Я согласен, это должно быть tmp.remove() .