jQuery Delegate не может запустить ajax - PullRequest
1 голос
/ 17 сентября 2010

Вот мой jQuery, использующий делегат и ajax:

$(".tweets").delegate("#fav #submit", "click", function(){
    var favid = $("#fav input#favid").val();
    var favsave = 'favid=' + favid;
    alert(favsave);
    $.ajax({
      type: "POST",
      url: "fav.php",
      data: favsave,
      success: function() {
        $('#fav').fadeOut(100);
      }
    });
    return false;

}); 

HTML:

   <div class='tweets'>
    <ul class='entries'>
      <li>
        <form id='fav' method='post' class='favo' action=''>
          <input style='display: none;' type='text' name='fav' id='fav' value='".$row["tweetid"]."' />
          <input type='submit' value='Add to Favorites' name='submit' id='submit' />
        </form>"
      </li>
    </ul>
   </div>

На странице есть еще один набор Ajax, который постоянно добавляется в список .entries, эти записи, которые добавляются, добавляют функцию щелчка, так что когда я нажимаю на них, отображаются предупреждения, но часть функции Ajax не работает

Есть идеи? Будет ли лучше жить?

1 Ответ

1 голос
/ 17 сентября 2010

«не работает» не является лучшим из всех описаний.

В любом случае, нет смысла использовать «абсолютные» селекторы в делегированном событии.
Путем запроса $("#fav input#favid").val(); вы получите результаты для всех элементов с этим идентификатором вы получите только первое совпадение (поскольку ids считается уникальным) (что было бы прискорбно только из-за множества id tags)

Вы должны получить свойство target из event object, чтобы определить элементы, которые должны быть вовлечены.

Пример:

$(".tweets").delegate("#submit", "click", function(event){
    var $self   = $(event.target);
    var favid   = $self.siblings('#fav');
    var favsave = 'favid=' + favid;

    $.ajax({
          type: "POST",
          url: "fav.php",
          data: favsave,
          success: function() {
                $self.closests('#fav').fadeOut(100);
          }
    });
    return false;
}); 

Вероятно, не очень хорошая идея иметь IDs для элементов, которые создаются динамически.
Как уже упоминалось, недопустимо HTML markup иметь несколько тегов ID.Наверное, должны быть занятия.

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