【问题标题】: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();

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多