2017-03-27 7 views
1

指定されたボタンをクリックせずにこの機能が起動するのはなぜですか? 私はいくつかの似たような問題を見ましたが、このコード構造を扱ったものはありませんでした。javascriptのクリックイベントハンドラは、クリックすることなく起動します

document.getElementById("main_btn").addEventListener("click", hideId("main"); 

function hideId(data) { 
    document.getElementById(data).style.display = "none"; 
    console.log("hidden element #"+data); 
} 

ありがとうございます!

+0

私は答えを投稿する必要があり、HTMLのonClickタグを使用しますか? –

答えて

1

あなたはそれを直接呼んでいます。

document.getElementById("main_btn").addEventListener("click", hideId("main"); 

コールバックで行う必要があります。

document.getElementById("main_btn").addEventListener("click", function(){ 
    hideId("main"); 
}); 
+0

これはうまくいきました、ありがとう!今はすべて意味がありますが、私はこの解決策が何度か来るのを見ましたが、なぜ別の関数内で関数を呼び出さなければならなかったのか分かりませんでした。しかし、私はイベントハンドラに、クリックするだけで関数を実行するように指示していると思います。 –

+0

@ MarkVonkあなたは正しく理解しています。 –

1

このコードは、あなただけのコールバックの名前を渡す必要がありますあなたの関数hideId("main")を実行します。

document.getElementById("main_btn").addEventListener("click", hideId); 

function hideId(event) { 
    var id = event.target.srcElement.id; // get the id of the clicked element 
    document.getElementById(data).style.display = "none"; 
    console.log("hidden element #"+data); 
} 
0
document.getElementById("main_btn").addEventListener("click", hideId.bind(null, "main"); 
+1

このコードでは質問に答えることができますが、問題の解決方法および/または理由を説明する追加のコンテキストを提供すると、回答の長期的価値が向上します。 –

+0

これは本当です.... –

関連する問題