【问题标题】:javascript disabling a div or a link? (for a 5-star rating system)javascript禁用div或链接? (对于 5 星评级系统)
【发布时间】:2010-04-26 23:03:34
【问题描述】:

基本上,我创建了一个 5 星评级系统。很典型。它显示了其他人给了该物品的星星数量,然后当用户将鼠标悬停在星星上时,它会根据他们超过的数量点亮 x 颗星星。

全部由 AJAX 运行。他们点击 5 星,它会自动将他们的 5 星评级添加到组中。问题是,在他们评价之后,我想关闭系统,但我似乎无法做到这一点。

我已经尝试了我能想到的一切。我已经尝试将 element.disable 用于 a hrefs 和 div,但它仍然让他们一遍又一遍地投票,至少在 Firefox 中……任何人都可以帮助我简单地“冻结” “用户投票的明星??如果我需要添加代码,那很酷!我想在这种情况下可能没有必要!

我可能应该添加。由于复杂的原因,这是直接的js,而不是jquery或其他任何东西。

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    这实际上取决于您如何实现代码,但假设您有一些链接:

    <div id="star-1" class="rate-it"><!-- HTML markup for your 5 stars --></div>
    <div id="star-2" class="rate-it"><!-- HTML markup for your 5 stars --></div>
    

    并已将 onclick 动态添加到基本 div,然后在被调用的函数中您将执行以下操作:

    function rateStars() {
       if(!this.rated) {
          this.rated = true;
          ...other code...
       }
    }
    

    这有点取决于范围内的内容,但如果 HTML 元素是范围,这将起作用。

    【讨论】:

    • 这基本上就是我最终所做的。还要感谢 BradBrening。我吃了事件处理程序,这两种方法结合起来效果很好。
    【解决方案2】:

    如果您已经创建了这段代码,那么您应该已经为鼠标悬停和点击创建了一些事件处理程序。如果您检测到用户之前执行过操作,只需吃掉这些事件。

    【讨论】:

      【解决方案3】:

      下面定义了两个元素,它们都有点击处理程序。但是您可以继续单击第一个以获取警报框,而第二个在第一次单击时禁用其处理程序,因此在进一步单击时它会“静音”。

      <span onclick='alert("Element 1")'>Button1</span><br/>
      <span onclick='alert("Element 2");this.onclick=""'>Button2</span>
      

      您不希望在生产代码中使用它,但这是一个简短的示例,说明了您应该做的事情。

      【讨论】:

        【解决方案4】:

        如果您使用依赖于 css 样式和标准 html 控件的jquery plugin, like this one。您可以通过简单地更改 css 样式来控制“冻结”。

        【讨论】:

          【解决方案5】:

          如果您使用的是 jquery(我推荐它),这将非常简单

          说你有一些像这样的 html

          <div id="star-1" class="rate-it">...</div>
          <div id="star-2" class="rate-it">...</div>
          

          然后你的 js 用 jquery

          $(document).ready(function () {
              $(".rate-it").click(function () {
                  // do your ajax calls, this.id => star-1, star-2, etc... depending on the clicked item
                  $(".rate-it").unbind("click"); // remove the handlers
              });
          });
          

          【讨论】:

            【解决方案6】:

            这是我想出的解决方法,希望对您有所帮助:

            <html>
            <head>
            <body>
            <a href="#" onclick="mumboJumbo(this); return false;">Rate me!</a>
            <script>
                function mumboJumbo(me){
                     var myDad = me.parentNode;
                     var mySis = document.createElement('span');
                     mySis.setAttribute('style', 'color: grey;');
                     mySis.innerHTML = me.innerHTML;
                     myDad.removeChild(me);
                     myDad.appendChild(mySis);
                };
            </script>
            </body>
            </html>
            

            它所做的只是用span 替换a(正如你所说的你在哪里使用a's)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-06-21
              • 2020-03-31
              • 1970-01-01
              • 2022-01-06
              • 1970-01-01
              相关资源
              最近更新 更多