web-dev-qa-db-ja.com

JavaScriptでボタンの色を変更する

簡単な機能でボタンの色を変えられないのですが、色がまったく変わりません。

<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

     <script language="JavaScript">

        function changeColor(){
             document.getElementsByTagName('button').style.backgroundColor="green";
        }

     </script>

    </head>

    <body >

        <form action="/action_page.php" method="get" name="form1">
            <input type="text" id="campoDeFlores">
            <button type="button" onclick="changeColor()" name="1">1</button>
            <button type="button"  name="2">2</button>
            <button type="button"  name="3">3</button>
        </form>
    </body>
</html>

それが機能しない理由はありますか?

6
user7128116

document.getElementsByTagNameは、単一の要素ではなく要素のリストを返します。 Array.fromで配列に変換し、Array.mapでボタンを反復処理する必要があります

function changeColor(){
    Array.from(document.querySelectorAll('button')).map(function(button) {
               button.style.backgroundColor="green";
    })
}
4
Hum4n01d

これを試して:

HTML

<form action="/action_page.php" method="get" name="form1">
  <input type="text" id="campoDeFlores">
  <button type="button" onclick="changeColor(this)" name="1">1</button>
  <button type="button" name="2">2</button>
  <button type="button" name="3">3</button>
</form>

JS

function changeColor(btn) {
  btn.style.backgroundColor = "green";
}

このフィドルを確認してください

説明

getElementsByTagName を使用していたため、最初はすべてのボタンの色を変更しようとしていると思いましたが、押されたボタンの色を変更したいだけのようです。その場合、配列を使用する必要はありません。クリックされた要素を関数に渡し、特定のボタンの色を変更するだけです。

1

everybuttonの代わりに、_id="myButton"_とdocument.getElementById('myButton')を使用してボタンを具体的に選択することをお勧めします。

1
Nartub

次の変更を行います。

  • changeColor関数がパラメーターとしてHTMLElementを受け入れることを許可します。
  • ボタンへの参照をchangeColor()に渡します。 button要素のonclick="changeColor()"onclick="changeColor(this)"に変更します
function changeColor (htmlEl) {
  htmlEl.style.backgroundColor="green";
}
<form action="/action_page.php" method="get" name="form1">
    <input type="text" id="campoDeFlores">
    <button type="button" onclick="changeColor(this)" name="1">1</button>
    <button type="button"  name="2">2</button>
    <button type="button"  name="3">3</button>
</form>
0
codneto