【问题标题】:Button background color toggle按钮背景颜色切换
【发布时间】:2013-06-07 15:41:23
【问题描述】:

我一直在尝试切换按钮 onclick 的背景颜色属性,但颜色仅更改一次,并且不会来回切换。下面是代码。

function btnColor(btn, color) {
var property = document.getElementById(btn);
    if (property.style.backgroundColor == "rgb(244,113,33)") {
        property.style.backgroundColor=color;
    }
    else {
        property.style.backgroundColor = "rgb(244,113,33)";
    }
}

<input type="button" id="btnHousing" value="Housing" onclick="toggleLayer('transparent1');btnColor('btnHousing','rgb(255,242,0)');" />

【问题讨论】:

  • Console.log property.style.backgroundColor 就在 if 之前,您会看到实际值是多少。

标签: javascript html button background-color


【解决方案1】:

一个简单的解决方案(依次为 JS、CSS 和 HTML)。 您在 CSS 中设置一个类,然后选择按钮(是的,JS 可以在一行中完成)并切换该类。

var button1 = document.querySelector("button");


button1.addEventListener("click", function() {

    document.body.classList.toggle("colorred");

});
.colorred {
    background-color: red;
}
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Change color to background</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" media="screen" href="main.css" />


</head>

<body>
    <button>Click me!</button>
    <script src="main.js"></script>
</body>

</html>

【讨论】:

    【解决方案2】:

    您遇到的问题是元素的background-color 在浏览器中的报告方式不同,无论是十六进制的 rgb、rgba(带或不带空格)还是 HSL...

    所以按钮可能永远不会满足if 条件,这意味着它会总是转到else

    考虑到这一点,我建议使用类名来跟踪取消/切换状态:

    function btnColor(btn, color) {
    var property = document.getElementById(btn);
        if (property.className !== 'toggled') {
            property.style.backgroundColor=color;
            property.className = 'toggled'
        }
        else {
            property.style.backgroundColor = "rgb(244,113,33)";
            property.className = '';
        }
    }
    

    JS Fiddle demo.

    当然,如果我们使用元素的class,我们不妨使用CSS来style元素:

    function btnColor(btn) {
    var property = document.getElementById(btn);
        if (property.className !== 'toggled') {
            property.className = 'toggled'
        }
        else {
            property.className = '';
        }
    }
    

    使用 CSS:

    #btnHousing {
        background-color: rgb(255,242,0);
    }
    
    #btnHousing.toggled {
        background-color: rgb(244,113,33);
    }
    

    JS Fiddle demo.

    之前的 JavaScript 可以简化为(使用相同的 CSS):

    function btnColor(btn) {
        var property = document.getElementById(btn);
        property.className = 'toggled' == property.className ? '' : 'toggled';
    }
    

    JS Fiddle demo.

    【讨论】:

    • 你建议我用什么?
    猜你喜欢
    • 2021-03-28
    • 2017-08-19
    • 2011-03-05
    • 2021-02-10
    • 2020-09-14
    • 1970-01-01
    • 2012-09-05
    • 2013-06-24
    • 1970-01-01
    相关资源
    最近更新 更多