【问题标题】:Create a button that changes between red and green创建一个在红色和绿色之间变化的按钮
【发布时间】:2016-05-11 23:40:49
【问题描述】:

我想创建一个简单的按钮,当我单击它们时,它会在红色和绿色之间变化,以表明某事已完成。有谁知道让按钮在颜色之间来回切换的简单方法?页面的设置还不是我想要的,但是需要先配置按钮,然后我才能按照我的意愿格式化页面的其余部分。我省略了处理正文和标题等其他内容的 CSS。 以下是我在网上看了一段时间后得到的:

function colorChange(id) {
  var e1 = document.getElementById(id);
  var currentClass = el.getAttribute("class");
  if(currentClass == 'classA') {
    el.setAttribute("class", "classB");
  }
  else {
    el.setAttribute("class", "classA");
  }
}
#select {
    width: 10em;
    height: 1.5em;
}

.classA {
    background: red;
}

.classB {
    background: green;
}
<input type="button" id="select" onclick="colorchange('select')" class="classA" />

【问题讨论】:

    标签: javascript html css button colors


    【解决方案1】:

    这里是原生 JavaScript 版本。您首先使用getElementById 选择器直接查询按钮。然后添加一个事件监听器,等待点击事件。

    classList,虽然返回一个数组,但不能在上面使用indexOf。但是,您可以使用contains。还需要注意的是,classList 在 Internet Explorer 9 或更早版本中不可用

    var button = document.getElementById('my-button');
    
    button.addEventListener('click', function() {
        if (button.classList.contains('red')) {   
          button.classList.remove('red');
          button.classList.add('green');
          button.innerHTML = 'Done';
        }
        else {
          button.classList.remove('green');
          button.classList.add('red');
          button.innerHTML = 'Not Done';
        }
    });
    .green { background: green; }
    .red { background: red; }
    <button id='my-button' class='green'>Change Color</button>

    这最好通过 jQuery 实现,它是 toggleClass 函数。

    $('#my-button').on('click', function() {
      $(this).text($(this).hasClass('red') ? 'Done': 'Not Done');
      $(this).toggleClass('red');
      $(this).toggleClass('green');
    });
    .red { background: red; }
    .green { background: green; }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <button id='my-button' class='red'>Change Color</button>

    正如您在上面看到的,在 jQuery 中要容易得多。

    【讨论】:

    • 我应该把 jQuery 放在哪里?如果你要制作一个 javascript 版本,那我就等着吧。
    • 这就是解决方案。 JavaScript 版本就像一个魅力!谢谢!
    • 我还能在“完成”和“未完成”之类的内容之间更改文本吗?我希望他们分别选择绿色和红色。
    • 如果我尝试使用两个按钮,这将不再有效。这是为什么?我投入的第一个作品,但现在第二个没有。会不会是因为我有未排序的列表和列表项?
    • 现在它只适用于按钮的一个实例,无论我把它放在哪里。有什么建议吗?
    【解决方案2】:

    你只需要更加小心你的语法。 colorchange 在您的输入与 colorChange 在您的 JS(大写“C”)和 e1el 不同(1 vs L)。

    function colorChange(id) {
      var el = document.getElementById(id);
      var currentClass = el.getAttribute("class");
      if(currentClass == 'classA') {
        el.setAttribute("class", "classB");
      }
      else {
        el.setAttribute("class", "classA");
      }
    }
    #select {
      width: 10em;
      height: 1.5em;
    }
    
    .classA {
      background: red;
    }
    
    .classB {
      background: green;
    }
    &lt;input type="button" id="select" onclick="colorChange('select')" class="classA" /&gt;

    【讨论】:

    • 这就是答案。只有几个错别字。
    • 这也没有改变我的结果。
    • @Tylersong55 在答案中尝试工作代码 sn-p?它适用于我的 Chrome
    • 这可以用三元改进
    【解决方案3】:

    你的逻辑没问题。只需要纠正这些错别字即可:

    1. e1 更改为 el(用 L 代替 1)
    2. onclick="colorchange('select')" 更改为onclick="colorChange('select')"

    请记住,您需要更加小心,因为 JavaScript 区分大小写

    玩得开心!

    【讨论】:

    • 这并没有改变结果中的任何内容。
    • 是的,这确实有效,但它与下面的答案重复。
    • @Tylersong55 是的。你只需要纠正你的错别字。您的代码运行良好。
    • 是的,这是 28 分钟前发布的,this 是 32 分钟前发布的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    相关资源
    最近更新 更多