ここから本文です

javascriptで作成したボタンを押した時に関数を呼び出したいのですが、なぜかボタ...

s_y********さん

2014/11/2814:44:36

javascriptで作成したボタンを押した時に関数を呼び出したいのですが、なぜかボタンが作成された時に、ボタンを押したら呼び出したい関数が呼び出されてしまいます....。

原因がわかる方おりましたら、教えてください。よろしくお願いいたします。

下記が自分が書いたソースになります。

var btn = document.createElement("input");
btn.id = "button1";
btn.type = "button";
btn.value = "ボタン";

document.getElementById("Tag_View").appendChild(btn);
document.getElementById("button1").attachEvent("onclick", test());

閲覧数:
125
回答数:
1

違反報告

ベストアンサーに選ばれた回答

ven********さん

2014/11/2816:59:27

こんばんわ~♪

Javascript の関数は、
┌────────
| 関数名()
└────────
と記述すると、
その関数が実行されて、関数の戻り値が返されます。

いっぽう、
関数名のあとに () を付けない場合は、
関数そのものを指しますヽ(・ω・o

質問のソースを見ると、
┌────────
| attachEvent( "onclick", test() );
└────────
のように、
関数名 test のあとに () を付けているので、
関数が実行されてしまっています。
また、
"onclick" には関数そのものではなく、
「関数 test() を実行した結果の戻り値」が
セットされてしまっています。

イベントに関数をセットするときは、
┌────────
| attachEvent( "onclick", test );
└────────
のように () を付けずに関数名を記述します。

あと、
イベントに関数を仕込むとき、
ブラウザによっては attachEvent が使えず、
エラーになってしまうことがあります。
イベントを仕込むメソッドは、
閲覧する人のブラウザ環境によって、
「addEventListener」と「attachEvent」に分かれます。
なので、
「addEventListener」が存在したら
┌────────
| addEventListener( … );
└────────
それ以外の場合は
┌────────
| attachEvent( … );
└────────
を使うようにしましょう・ω・)b'

その場合のソースコードは、
三項演算子 ? を使って書くと、
┌────────
| var btn = document.createElement("input");
| btn.id = "button1";
| btn.type = "button";
| btn.value = "ボタン";

| btn.addEventListener ?
| btn.addEventListener( "click", test, false ) :
| btn.attachEvent( "onclick", test );
└────────
のようになります♪
「addEventListener」のときは、
「onclick」ではなく、
on をつけずに「click」であることに注意してください'd(・ω・o

質問した人からのコメント

2014/11/28 17:32:07

感謝 うおおおおおおおおおおおお!!!
教えて頂いた通りにやってみたら解決しました!!!
ありがとうございました!!!!!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる