5

我正在使用来自http://www.fyneworks.com/jquery/star-rating/的 JQuery 星级插件 (v2.61) 。一切顺利,但我想在用户投票时禁用星星。

目前我的用户选择他们的评级并单击鼠标。这将通过 AJAX 调用更新我的数据库。星级评分器更改以显示用户的选择,其中星星显示为红色。但是,如果用户将鼠标悬停在星星上,它们仍然处于活动状态,并且可以再次提交投票。我正在停止这个重复的投票服务器端,但从可用性的角度来看,我希望在用户点击后禁用星星。

(我想我可以使用 JQuery 重新加载 div 或其他内容以显示星星的只读版本,但我希望有一些更优雅和更简单的解决方案)。

谢谢。

4

5 回答 5

5

为什么不允许用户更新他们的评分?也许他们的第一次评级很仓促,他们想更改它,或者他们只是点击了错误的星号。

当然,您需要某种方法来识别每个用户,并在某个地方存储每个用户对每个项目的评分。

(我实际上不知道该怎么做,但从可用性的角度来看,这似乎比确保你第一次做对更好的方法,因为你以后不能改变它。)

于 2009-02-25T21:02:09.233 回答
3

该问题已在最新版本的插件中得到解决。现在在回调中,您可以简单地执行以下操作:

this.rating('disable');

耶!

于 2009-03-17T21:40:52.037 回答
2

这可能类似于您的“重新加载 div”解决方案,但我认为最好的解决方案可能是在完成 AJAX 请求后简单地禁用输入项。如果您使用的是 jQuery.ajax,您可以指定在请求完成后运行的回调函数。

jQuery.ajax({
    type: "POST",
    url: ...
    data: ...
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        jQuery('.star').attr('disabled', true);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        displayError();
    }
});

从他们的网站:

使用 disabled 属性将控件仅用于显示目的

<input name="star3" type="radio" class="star" disabled="disabled"/> 
<input name="star3" type="radio" class="star" disabled="disabled"/> 
<input name="star3" type="radio" class="star" disabled="disabled" checked="checked"/> 
<input name="star3" type="radio" class="star" disabled="disabled"/> 
<input name="star3" type="radio" class="star" disabled="disabled"/>
于 2009-02-23T18:43:03.780 回答
2

我是该插件的作者,我刚刚(实际上只是)发布了一个新版本(3.1),应该可以解决您在这里讨论的问题。

@planetjones,请注意 this.rating('disable'); 与 this.rating('readOnly'); 不一样 this.rating('readOnly') 将阻止控件更改当前选择,而 this.rating('disable') 将阻止完全提交值。

@svinto,用于删除单选框的插件,但现在它隐藏了它们。为了恢复,您所要做的就是 1. 删除星星 2. 显示单选框 3. 从单选框中删除插件的数据 - $().data('rating') 和 $().data( 'rating.star') 4. 从单选框中取消绑定'change'事件

顺便说一句,更新将在这里公布:http: //twitter.com/fyneworks

于 2009-03-21T15:19:46.547 回答
1

您真正想要的是将元素还原为单选按钮,然后添加只读,然后使它们再次看起来不错。恢复似乎是不可能的,但您可以取消绑定所有发布到服务器的事件。$("...").unbind();

于 2009-02-23T17:54:41.977 回答