LoginSignup
2
0

More than 1 year has passed since last update.

HTMLのonclickが動作しなくて5時間悩んだから僕の5時間をこの記事1つにまとめる。

Posted at

初めに

本日、とあることでHTMLのonclickを使用することになりました。
HTMLのonclick要素は、その要素がクリックされたときにjavascriptの関数を発火させることができる便利な機能。
javascriptからやるにはイベントリスナーを参照する必要があり3行クライのコードが必要だけれど、onclickを使用すると何文字かで完成!
これを使わない手はありません。

コード1

僕は以下のようなコードを立てました。

<button onclick="onclick();">絶対押すなよ</button>

function onclick(){
    var i = 0
    while(i<20){
        if (i%15 == 0){
            alert("^@^");
        }
        else if (i%3 == 0){
            alert("^¥^");
        }
        else if (i%5 == 0){
            alert("^^");
        }
        else {
            alert(i);
        }
    }
}

ただ、動きません。

対処法

onclickの;を消す。
onclickでは、javascriptの関数の;は必要ないのです。

<button onclick="onclick()">絶対押すなよ</button>

function onclick(){
    var i = 0
    while(i<20){
        if (i%15 == 0){
            alert("^@^");
        }
        else if (i%3 == 0){
            alert("^¥^");
        }
        else if (i%5 == 0){
            alert("^^");
        }
        else {
            alert(i);
        }
    }
}

あれ、でも動かない...
なぜだ。

対処法

関数名を直す!

以上のコードを実行すると、エラーが出ます。
なぜか?
関数名がonclickだから!!!

以下のように直しましょう。

<button onclick="onclicked()">絶対押すなよ</button>

function onclicked(){
    var i = 0
    while(i<20){
        if (i%15 == 0){
            alert("^@^");
        }
        else if (i%3 == 0){
            alert("^¥^");
        }
        else if (i%5 == 0){
            alert("^^");
        }
        else {
            alert(i);
        }
    }
}

これで正しく動くようになりました。

考察

なぜ、関数名がonclickだと動かなかったのか。
ここからはあくまで考察ですが。おそらくonclick要素で、関数onclickを指定するとonclickイベントが発生するのではないでしょうか。
onclickをonmouseoutに変えてみましたが関数名がonmouseoutだと発火しませんでした。

終わりに

5時間の成果。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0