【问题标题】:Button text toggle in jqueryjquery中的按钮文本切换
【发布时间】:2012-11-19 02:57:46
【问题描述】:

当我单击“.pushme”按钮时,它会将其文本变为“不要推我”。当再次单击按钮时,我想再次将文本变为“推我”。我该怎么做?

<html>

<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>

<body>
    <button class='pushme'>PUSH ME</button>
    <script>
        $(".pushme").click(function () {
            $(this).text("DON'T PUSH ME");
        });
    </script>
</body>

</html>

http://jsfiddle.net/DQK4v/

谢谢。

【问题讨论】:

标签: jquery button toggle


【解决方案1】:

你可以使用text方法:

$(function(){
   $(".pushme").click(function () {
      $(this).text(function(i, text){
          return text === "PUSH ME" ? "DON'T PUSH ME" : "PUSH ME";
      })
   });
})

http://jsfiddle.net/CBajb/

【讨论】:

  • 有人能解释为什么在html 函数中包含特定的html 不起作用吗? jsfiddle.net/CBajb/18
  • 如果PUSH MEDON'T PUSH ME 实际上是两个段落,那么有没有更简洁的方法呢?
  • 是的,有。使用对象:conditon ? obj.par1 : obj.par2。另一种选择是切换元素的可见性。
  • @undefined 参数“i”的意义何在?我不明白为什么需要它,但我知道它是必需的,因为没有它它就无法工作。我明白为什么需要文本但根本不使用“i”?
  • @gmonz i 指的是迭代的索引。我们必须接受第一个参数才能使用第二个参数。这就是函数的工作原理!也可以使用this.textContent 代替回调函数的第二个参数。基本上这里的text 等于this.currentText,其中this 指的是点击的.pushme 元素。
【解决方案2】:

你也可以像这样使用.toggle()

$(".pushme").toggle(function() {
    $(this).text("DON'T PUSH ME");
}, function() {
    $(this).text("PUSH ME");
});

更多信息请访问http://api.jquery.com/toggle-event/

这种方式还可以很容易地更改文本或添加超过 2 个不同的状态。

【讨论】:

  • .toggle 自 jquery 1.9 起已被删除。真可惜。看起来很不错!
  • @Relequestual 不幸的是,这是真的。隐藏/显示元素 api.jquery.com/toggle 的切换仍然存在,但此示例在 1.9 后将不再适用。 :(
  • @Relequestual 有很多不错的选择,例如this answer
【解决方案3】:

如果您只想将操作应用于该按钮,请尽可能使用自定义 ID。

HTML

<button class="pushDontpush">PUSH ME</button>

jQuery

$("#pushDontpush").click(function() { 
    if ($(this).text() == "PUSH ME") { 
        $(this).text("DON'T PUSH ME"); 
    } else { 
        $(this).text("PUSH ME"); 
    }; 
});

工作代码笔:Toggle text in button

【讨论】:

    【解决方案4】:

    如果你理解的话,使用 if/else 语句或三元语句

    $(".pushme").click(function () {
        var $el = $(this);
        $el.text($el.text() == "DON'T PUSH ME" ? "PUSH ME": "DON'T PUSH ME");
    });
    

    http://jsfiddle.net/dFZyv/

    【讨论】:

      【解决方案5】:

      有这么多很棒的答案,我想我会再折腾一个。与其他的不同,这个可以让您轻松地循环浏览任意数量的消息:

      var index = 0,
          messg = [
              "PUSH ME", 
              "DON'T PUSH ME", 
              "I'M SO CONFUSED!"
          ];
      
      $(".pushme").on("click", function() {
          $(this).text(function(index, text){
              index = $.inArray(text, messg);
              return messg[++index % messg.length];
          });
      }​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​);​
      

      演示:http://jsfiddle.net/DQK4v/2/

      【讨论】:

        【解决方案6】:
        $(".pushme").click(function () {
          var button = $(this);
          button.text(button.text() == "PUSH ME" ? "DON'T PUSH ME" : "PUSH ME")           
        });
        

        这个三元运算符有一个隐式返回。 如果? 之前的表达式是true,则返回"DON'T PUSH ME",否则返回"PUSH ME"

        这个 if-else 语句:

        if (condition) { return A }
        else { return B }
        

        有等价的三元表达式:

        condition ? A : B
        

        【讨论】:

          【解决方案7】:

          我更喜欢下面的方式,任何按钮都可以使用。

          <button class='pushme' data-default-text="PUSH ME" data-new-text="DON'T PUSH ME">PUSH ME</button>
          
          $(".pushme").click(function () {
              var $element = $(this);
              $element.text(function(i, text) {
                  return text == $element.data('default-text') ? $element.data('new-text')
                                                               : $element.data('default-text');
              });
          });
          

          demo

          【讨论】:

            【解决方案8】:

            如果您使用 'value' 属性设置按钮文本,则需要设置

            • $(this).val()

            代替:

            • $(this).text()

            在我的情况下,将 JQuery 直接添加到按钮的 onclick 事件效果更好:

            onclick="$(this).val(function (i, text) { return text == 'PUSH ME' ? 'DON'T PUSH ME' : 'PUSH ME'; });"
            

            【讨论】:

            • 对我来说,这仅适用于每隔一个按钮单击一次。
            • 一位朋友帮我弄清楚这是因为我有两个事件监听器。我只是将另一个答案中的代码直接粘贴到 JS 文件中,并且我也从 onclick 调用父函数。
            【解决方案9】:

            你也可以使用数学函数来做到这一点

            var i = 0;
            $('#button').on('click', function() {
                if (i++ % 2 == 0) {
                    $(this).val("Push me!");
                } else {
                    $(this).val("Don't push me!");
                }
            });
            

            DEMO

            【讨论】:

              【解决方案10】:

              您可以使用更简单的解决方案,而不是将上述示例增加到无穷大:

              var i=0;
                    $('#button').on('click', function() {
                        if(i == 0){
                          $(this).val("Don't push me!"); i = 1;
                        }else{
                          $(this).val("Push me!"); i = 0;
                        }
                    });
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-12-01
                • 2015-11-13
                • 1970-01-01
                • 1970-01-01
                • 2012-02-24
                • 2013-05-26
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多