【问题标题】:JQuery star rating plugin - disable after vote submissionJQuery 星级评分插件 - 投票提交后禁用
【发布时间】:2009-02-23 17:38:43
【问题描述】:
我正在使用 JQuery 星级评分插件 (v2.61)
http://www.fyneworks.com/jquery/star-rating/。一切都在进行
好吧,但我想在用户投票后禁用星星。
目前我的用户选择他们的评级并单击鼠标。这
通过 AJAX 调用更新我的数据库。星级评定者更改为
显示用户的选择,星星显示为红色。然而
如果用户将鼠标悬停在星星上,它们仍然处于活动状态并且
他们可以提交另一票。我要停止重复投票
服务器端,但从可用性的角度来看,我希望星星
用户点击后被禁用。
(我想我可以用 JQuery 重新加载 div 或其他内容以显示
星星的只读版本,但我希望还有更多
优雅而简单的解决方案)。
谢谢。
【问题讨论】:
标签:
javascript
jquery
ajax
jquery-plugins
【解决方案1】:
为什么不允许用户更新他们的评分?也许他们的第一次评级很仓促,他们想更改它,或者他们只是点击了错误的星号。
当然,您需要某种方法来识别每个用户,并在某个地方存储每个用户对每个项目的评分。
(我实际上不知道该怎么做,但从可用性的角度来看,这似乎比确保你第一次做对更好的方法,因为你不能改变它。)
【解决方案2】:
该问题已在插件的最新版本中得到解决。现在在回调上你可以简单地做:
this.rating('disable');
是的!
【解决方案3】:
这可能类似于您的“重新加载 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"/>
【解决方案4】:
我是该插件的作者,我刚刚(实际上只是)发布了一个新版本 (3.1),应该可以解决您在此处讨论的问题。
@行星琼斯,
注意 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
【解决方案5】:
您真正想要的是将元素还原为单选按钮,然后添加只读,然后使它们再次看起来不错。恢复似乎是不可能的,但您可以取消绑定所有发布到服务器的事件。 $("...").unbind();