2013-02-17 40 views
1

我有一個頁面上的項目列表動態生成 - 我可以很容易地得到每一個的$ itemid。在同一頁面上的多重jQuery實例

我想爲每個人設置一個投票,但是我不能讓這些實例足夠不同,以便投票鏈接的實例不會互相混淆,而且頁面正在按照您的預期嘗試張貼的所有項目,我的vote.php頁

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     $(".submitVote a").click(function() 
     { 
      var ID = <?php echo $itemid;?>; 
      var add = 1; 
      var votedby = <?php echo $usr_id ;?>; 
      var rating = <?php echo $ratings;?> 

      var queryString = 'id='+ ID +'&votedby='+votedby +'&add='+add +'&rating='+rating; 
      $("#vote").text(rating+1); 

       $.ajax({ 
       type: "POST", 
       url: "vote.php", 
       data: queryString, 
       cache: false, 
       success: function(html) 
       { 

        $(".submitVote").html('<p style="margin:1px;padding:0px;"></p>'); 
        $("#greet").html("Thanks for voting!"); 
        $("#greet").delay(500).fadeOut(5000); 

       } 
       }); 
     }); 
    }); 
</script> 

    <div id="<?php echo $itemid;?>" style="width:350px;"> 
     <span class="submitVote" > 
      <p style="margin:1px;padding:0px;"> 
       Submit your <a href="#">vote</a> 
      </p> 
     </span> 
     <div id="voteBox"> 
      <div id="vote<?php echo $itemid;?>"> <?php echo $ratings;?> </div> 
      <span style="color:#fae240;">votes</span> 
     </div> 
     <div id="greet" style="padding-left:65px;"></div> 
    </div> 
+0

你的問題不完全清楚,但我懷疑你可以通過利用jQuery調用你的事件處理程序的事實來取得進展,'this'綁定到涉及的DOM元素。因此,只要您的PHP代碼將不同的「id」值和其他信息存儲在「data-」屬性中,事件處理程序就可以形成適當的HTTP請求。 – Pointy 2013-02-17 18:17:07

+0

對不起,我沒有更好的解釋......我如何將$ this與上面的結合起來。在ts中,當前頁面上的所有元素都張貼到post.php頁面 – 2013-02-17 18:41:29

+0

使用PHP將信息放入HTML中,而不是JavaScript中。你沒有發佈HTML的樣子,所以我不能提供細節。 – Pointy 2013-02-17 18:45:04

回答

1

OK,在你的HTML:

<div id="<?php echo $itemid;?>" style="width:350px;"> 
    <span class="submitVote" > 
     <p style="margin:1px;padding:0px;"> 
      Submit your <a href="#">vote</a> 
     </p> 
    </span> 
    <div id="voteBox"> 
     <div id="vote<?php echo $itemid;?>"> <?php echo $ratings;?> </div> 
     <span style="color:#fae240;">votes</span> 
    </div> 
    <div id="greet" style="padding-left:65px;"></div> 
</div> 

(當然,你的PHP生成的HTML),你已經把一個物品ID的地方。你可以做的就是把它添加到<a>,使其更容易在「點擊」處理程序,以發現:

Submit your <a href='#' data-item-id='<?php echo $itemid;?>' data-ratings='<?php echo $ratings;?>' data-user-id='<? php echo $usr_id; ?>'>vote</a> 

用戶ID很可能被藏匿只有一次,但我會離開它像,爲了簡化。通過這樣做,投票所需的一切就在<a>本身。這很有用,因爲您的事件處理程序將使用該DOM節點作爲this進行調用。因此,您只需要在您的頁面上使用JavaScript代碼—,或者更好的是,它可以位於您導入的單獨文件中。

$(document).ready(function() 
{ 
    $(".submitVote a").click(function() 
    { 
     var $clicked = $(this); 
     var $voteBlock = $clicked.closest('.submitVote'); 
     var ID = $clicked.data('item-id'); 
     var add = 1; 
     var votedby = $clicked.data('user-id'); 
     var rating = $clicked.data('ratings'); 

     var queryString = 'id='+ ID +'&votedby='+votedby +'&add='+add +'&rating='+rating; 
     $("#vote").text(rating+1); 

      $.ajax({ 
      type: "POST", 
      url: "vote.php", 
      data: queryString, 
      cache: false, 
      success: function(html) 
      { 

       $voteBlock.html('<p style="margin:1px;padding:0px;"></p>'); 
       $("#greet").html("Thanks for voting!"); 
       $("#greet").delay(500).fadeOut(5000); 

      } 
      }); 
    }); 
}); 

.data()這些呼籲來自這三個「數據 - 」提取值的<a>屬性。

編輯 —我更新上面的功能,以確保只有被點擊了<a>投票後得到的手段傳給。我添加了變量「$ voteBlock」,它將是<a>的父<span>。 (順便說一下,它不是真正正確的HTML把一個<p>一個<span>裏面,但它可能不會引起劇烈的問題,你可以更換<span><div>但不管。)

+0

感謝您花時間幫助新手 - 我放棄它..史蒂夫 – 2013-02-17 19:32:22

+0

試過,但值不被傳遞出來(加\t作品「因爲它是硬編碼) ID \t不確定 評級\t不確定 votedby \t未定義的職位是更好的,即只有一個,不是每個項目提供 – 2013-02-17 20:53:13

+0

好檢查HTML與「查看源代碼」或瀏覽器調試器的外觀如何。確保''標籤真的具有這些「data-foo-bar」屬性。 – Pointy 2013-02-17 21:01:10

相關問題