代码之家  ›  专栏  ›  技术社区  ›  CLiown

jQuery委托无法运行ajax

  •  1
  • CLiown  · 技术社区  · 16 年前

    $(".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>
    

    有什么想法吗?生活会更好吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   jAndy    16 年前

    无论如何,在委托事件中使用“绝对”选择器是没有意义的。
    通过查询 $("#fav input#favid").val(); 您将从具有该id的所有元素获得结果 你只会得到第一场比赛(自从 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 标签。我想应该是上课吧。