投票提交后禁用JQuery星级评级插件

时间:2009-02-23 17:38:44

标签: javascript jquery ajax jquery-plugins

我正在使用JQuery星级评级插件(v2.61) http://www.fyneworks.com/jquery/star-rating/。一切都在进行 好吧,但我想在用户投票时禁用星标。

目前我的用户选择他们的评级并单击鼠标。这个 通过AJAX调用更新我的数据库。明星评估师改为 显示用户的选择,星号显示为红色。然而 如果用户将鼠标滑过星星,它们仍处于活动状态 他们可以提交另一票。我正在停止这次重复投票 服务器端,但从可用性的角度来看,我喜欢星星 在用户点击后被禁用。

(我想我可以用JQuery重新加载div或者东西以显示一个 只读星星的版本,但我希望还有更多 优雅而简单的解决方案)。

感谢。

5 个答案:

答案 0 :(得分:5)

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

当然,您需要某种方式来识别每个用户,并在某处存储每个项目的每个用户评级。

(我实际上并不知道如何做到这一点,但从可用性的角度来看,这似乎是一种更好的方法,而不是确保你第一次就做对,因为之后你无法改变它。)< / p>

答案 1 :(得分:3)

该插件的最新版本已解决该问题。现在回调你可以做到:

this.rating('disable');

Yey!

答案 2 :(得分: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"/>

答案 3 :(得分:2)

我是该插件的作者,我只是(字面上只是)发布了一个新版本(3.1),它应该处理你在这里讨论过的问题。

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

@ svinto, 该插件用于删除无线电盒,但现在它隐藏了它们。 为了恢复,你所要做的就是 去掉星星 2.显示收音机盒 3.从收音机框中删除插件的数据 - $()。data('rating')和$()。data('rating.star') 4.从无线电盒中取消绑定“更改”事件

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

答案 4 :(得分:1)

你真正想要的是将元素恢复为单选按钮,然后添加只读,然后再次使它们看起来很好。恢复似乎不可能,但您可以解除发布到服务器上的所有事件。 $( “...”)解除绑定();