【问题标题】:jquery star rating plugin help needed需要 jquery 星级评分插件帮助
【发布时间】:2009-06-17 18:36:52
【问题描述】:

我正在从 www.fyneworks.com/jquery/star-rating/ 添加星级插件,但我发现文档相当晦涩。可能只是我找错了地方,这对我来说并不罕见。

我们在一个 asp.net MVC 应用程序上,我想在 3 个不同的页面中添加星级对象。在“创建评级”页面上,我想实现 5 星评级,但我想隐藏或消除“删除”图标。换句话说,当我给用户评分的机会时,我希望将其默认为 3 星,并且只允许他们投票 1 - 5。我不希望他们能够提交零评分.单选按钮背后的概念将处理此问题,但“删除”选项会覆盖此选项。
这是我目前拥有的代码。

        <td>
            <strong>
                <label for="Rating">
                    Rating:</label></strong>
        </td>
        <td valign="top" width="180">
            <input name="rating" type="radio" class="star" value="1" />
            <input name="rating" type="radio" class="star" value="2" />
            <input name="rating" type="radio" class="star" value="3" checked="checked" />
            <input name="rating" type="radio" class="star" value="4" />
            <input name="rating" type="radio" class="star" value="5" />
        </td>

这是我的第一篇文章,所以我希望这是在协议范围内,我还有关于同一个 jquery 的另一个问题,我不知道我是否应该创建一个单独的问题或在此处添加它。现在我将在此处添加它,如果这是错误的,请告诉我,我将创建它作为一个单独的问题。

在应用程序的另一个页面上,我想显示每个实体的多个评论以及评级。我看不出应该怎么做。我有一个 foreach 循环,它显示每条评论的星级,但我的循环将所有评级的所有星星放在评论列表的顶部。换言之,如果特定实体有 6 个评级,则显示 30 颗星 (6 x 5),后跟 6 条摘要行。我假设我必须以某种方式动态更改循环中输入名称的名称,以获取与其摘要行关联的不同对象。这是代码:

<table>
<% foreach (var review in Model.Reviews)
   { %>
       <tr>
        <% if (!Model.IsSingleBusiness)
           { %>
               <td> 
                   <%= Html.ActionLink(Html.Encode(review.Title), "Details", new { id = review.ReviewId, eId = Model.Entity.EntityId })%>   
               </td>
         <% } %>
           <td valign="top">
               <%= Html.ActionLink("Details", "Details", new { id = review.ReviewId, eId = Model.Entity.EntityId })%>
               <br />Rating: <%= Html.Encode(review.Rating)%>
                    <input name="rating" type="radio" class="star" disabled="disabled" />
                    <input name="rating" type="radio" class="star" disabled="disabled" />
                    <input name="rating" type="radio" class="star" disabled="disabled" />
                    <input name="rating" type="radio" class="star" disabled="disabled" />
                    <input name="rating" type="radio" class="star" disabled="disabled" />
               <br />By: <%= Html.Encode(review.Reviewer.FullName)%>
           </td>
           <td valign="top">
               <%= Html.ActionLink(Html.Encode(review.Title), "Details", new { id = review.ReviewId, eId = Model.Entity.EntityId })%>
           </td>
       </tr>
<% } %>

</table>

提前感谢您的帮助。

鲍勃

【问题讨论】:

  • 这些应该是两个独立的问题。对于问题 1,您可能必须修改插件以不呈现取消按钮。对于问题 2,您必须以不同的方式命名每组输入或对插件进行一些修改以引入分组的概念。这些都是插件的限制。

标签: jquery asp.net-mvc


【解决方案1】:

您可以使用插件的设置参数来禁用取消按钮:

$.fn.rating.options = { required: true };

要在页面上使用“星”类但没有取消按钮的所有单选按钮上启用插件:

$(function(){
    $.fn.rating.options = { required: true };
    $('.star').rating({
        callback: function(value, link) {
            // To submit the form automatically:
            // this.form.submit();
            // To submit the form via ajax:
            $(this.form).ajaxSubmit();
        }
    });
});

【讨论】:

  • 必须从原始 js 插件文件中编辑默认值,但可以。
【解决方案2】:

查看插件的代码,在第一个对象中,您有函数 .each() 在其中您有用于创建取消按钮的代码,它被注释为“// Create 'cancel' button” - 注释代码如下。应该关闭取消按钮。要设置为默认 3 星,请通过在 firebug 中运行此代码并更改您需要的内容来查看此代码的行为方式。

【讨论】:

  • 谢谢红。这确实摆脱了“取消”按钮,但在代码的后面,draw: function(),特别是在注释“// Show/hide 'cancel' button”中,似乎期待取消按钮在那里将其设置为显示或隐藏。我不确定萤火虫是什么,但在我看来这是我应该知道的,所以我会查一下。感谢您的帮助。
  • 我在 Show/hide 'cancel' 按钮上注释掉了 control.cancel 三元语句,效果很好。谢谢您的帮助。我仍然对第二个问题有疑问,但我会将该部分作为单独的问题重新提交。我不确定如何为您的回答表示赞赏,但它足够详细,我能够完成我的任务。谢谢。
  • 我刚刚注意到一些事情,如果您注释创建取消按钮的行,它也会禁用回调函数。我建议使用 André van Toly 解决方案,一旦它运行良好且没有副作用:$.fn.rating.options = { required: true };
【解决方案3】:

还有这个:

$(function(){
$('.star').rating({
    required: true,
    callback: function(value, link) {
        // To submit the form automatically:
        // this.form.submit();
        // To submit the form via ajax:
        $(this.form).ajaxSubmit();
    }
});

});

【讨论】: