1つのHTML中ではidは一意にする必要がありますが、誤って同名のidを複数定義してしまった場合にどのような動きとなるかをまとめてみました。
サンプルソース
例)id="d1"を3つ定義した場合にgetElementById("d1") する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>サンプル1</title> <script> function test(){ var obj = document.getElementById("d1"); obj.innerText = "値をセットしました。"; } </script> </head> <body> <div id="d1">D1</div> <div id="d1">D2</div> <div id="d1">D3</div> <input type="button" id="btn1" value="ボタン" onclick="test()"> </body> </html> |
1つめのdivにのみ値がセットされます。
一番最初に見つかったIDが対象となるようです。
例2)id="btn1"のボタンを3つ定義し、clickイベントをセットする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>サンプル2</title> <script> window.onload=function(){ document.getElementById("btn1").onclick = function(){ alert("ボタンが押されました。"); } } </script> </head> <body> <input type="button" id="btn1" value="ボタン1"> <input type="button" id="btn1" value="ボタン2"> <input type="button" id="btn1" value="ボタン3"> </body> </html> |
1つめのボタンのみclickイベントがセットされます。
2つめ、3つめのボタンにはイベントは何もセットされません。
例3)同じボタンにclickイベントを3回定義する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>サンプル3</title> <script> window.onload=function(){ document.getElementById("btn1").onclick = function(){ alert("1番目の定義です。"); } document.getElementById("btn1").onclick = function(){ alert("2番目の定義です。"); } document.getElementById("btn1").onclick = function(){ alert("3番目の定義です。"); } } </script> </head> <body> <input type="button" id="btn1" value="ボタン"> </body> </html> |
- (結果)
- 3番目の定義です。
一番最後のイベントがセットされます。
上書きされて一番最後のものが残る感じですね。
まとめ
- 同名のidを複数定義すると、1つめのものが有効になる感じです。