2017-12-08 19 views
0

addEventListener()メソッドでこのような問題が発生するのは初めてです。 setTimeoutで使用しようとすると、addEventListenerに「クリック」プロパティがあっても、その関数が自動的に呼び出されます。addEventListener + setTimeout

<button id="test">Test</button>

document.getElementById("test").addEventListener("click", setTimeout(myFunc, 2000)); 

function myFunc() { 
    console.log("Hello"); 
} 
+2

あなたはのsetTimeoutを呼び出し、それがクリックハンドラに戻り、何を割り当てるため。だからタイムアウトはIDを返すので、基本的には '... Listener(" click "、133)' – epascarello

+0

addEventListenerの2番目の引数は、関数を呼び出す結果ではなく、関数である必要があります –

答えて

2

これは、あなたが何をしたいだろう。

document.getElementById("test").addEventListener("click", function(){setTimeout(myFunc, 2000)}); 
 

 
function myFunc() { 
 
    console.log("Hello"); 
 
}
<button id="test">Test</button>

2

あなたが呼び出す関数内setTimeoutを使用することができます。 Jsfiddle

document.getElementById("test").addEventListener("click", myFunc); 

function myFunc() { 
    setTimeout(function(){ 
     console.log("Hello"); 
    }, 6000); 
} 
0

また、引数として渡ししようとしているときに、それを起動しようとしているbind対を経由して、あなたが今けどcurryあなたの機能を持っているとまったく同じコードを保つことができます。

document.getElementById("test").addEventListener("click", setTimeout.bind(null, myFunc, 2000)); 
 

 
function myFunc() { 
 
    console.log("Hello"); 
 
}
<button id="test">Click</button>