2012-04-14 67 views
0

我試圖實現一個評級插件。我能夠使評分插件正常工作。我正在努力擴展它。所以每次點擊評級時,都會將該標籤置於評級本身之下。目前它綁定到頁面上其他地方的css id。Jquery在MVC中製作選擇器Foreach

該場景是一個Twitter消息,似乎不能得到一個選擇器來更新消息本身。它把信息放在所有的人身上,因爲它不是唯一的。

我該如何使項目獨一無二。該插件的文檔是http://rateit.codeplex.com/documentation

$(document).ready(function() { 

     //we bind only to the rateit controls within the products div 

     $(".rateit").bind('over', function (event, value) { $(this).attr('title', value); }); 
     $(" .rateit").bind('rated reset', function (e) { 

      var ri = $(this); 

      //if the use pressed reset, it will get value: 0 (to be compatible with the HTML range control), we could check if e.type == 'reset', and then set the value to null . 
      var value = ri.rateit('value'); 
     var ratingid = ri.data('ratingid');   



      //maybe we want to disable voting? 
      ri.rateit('readonly', true); 

      $.ajax({ 
       url: '/Home/GetRating', //your server side script 
       data: { id: ratingid, value: value }, //our data 
       type: 'POST', 
       success: function (data) { 
        $('#ratemsg').html(data); 

       }, 
       error: function (jxhr, msg, err) { 
        $('#response').append('<li style="color:red">' + msg + '</li>'); 
       } 
      }); 
     }); 

    }); 

</script> 

@foreach (var item in Model) 
{ 
<div id="[email protected](item.StatusId.ToString())" class="TwitterMessageBox"> 

    <ol> 
     <li class="TweetLineBody"> 
      @Html.Hidden("Statusid", item.StatusId) 
      <div class="TwitProfileImage"> 
       <img [email protected](item.ImageUrl) alt="@item.ScreenName" /> 
      </div> 
      <div class="TwitRealName"> 
       @item.User 
      </div> 
      <div class="TwitNickName"> 
       @MvcHtmlString.Create(@Html.Namify(@item.ScreenName)) 
      </div> 
      <div class="TweetText"> 
       @MvcHtmlString.Create(@item.Tweet)</div> 
      <div class="TweetTime"> 
       @Html.RelativeDate(@item.Created)</div> 

      <div id="[email protected](item.StatusId.ToString())" name="[email protected](item.StatusId.ToString())" class="TweetRating"> 

       // This is where the rating widget goes and records and updates    
       <div data-ratingid="@item.StatusId" class="rateit"></div> 
     // this is where i want to go but i cant figure out a way 
       <span id ="ratemsg" name="[email protected](item.StatusId.ToString())" class="ratemsg"> </span> 
      </div> 

     </li> 
    </ol> 

    </div> 
} 

正如你可以在上面看到,我試圖通過將消息ID是一個狀態ID來選擇設置一個唯一的密鑰,但我似乎無法使用通配符來選擇它。我嘗試了一些jQuery網站上的例子,我似乎無法得到它。

謝謝。

回答

2

而不是使用一個id,只保存當前.rateit元素的兄弟。

var ri = $(this), 
    msg = ri.next(); 

... 

    success: function (data) { 
     msg.html(data); 
    }, 
+0

這工作真棒。讓我明白這一點。 ri.next獲取下一個元素並設置值。我將它設置爲msg對象,然後它可以工作。 – 2012-04-14 16:04:58

+0

是的,DOM遍歷>選擇器。如果您知道哪個消息元素與評級元素相對應,則不需要唯一標識符。 – Dennis 2012-04-14 16:32:59

+0

我試圖將div移出tweetrating,投票明星正在破壞佈局 – 2012-04-15 15:35:29