2017-05-12 3 views
1

私の小さな機能「タップアンドホールド」にはわからない問題があります。誰かが間違っていることを教えてもらえますか?手伝ってくれてありがとう。JavaScriptをタップ&ホールドします。何かが動かない

<!DOCTYPE html> 
<html> 
<body> 
<button id="seconds">30</button> 

<script type="text/javascript"> 


var timeoutId = 0; 

$('#seconds').on('mousedown', function() { 
timeoutId = setTimeout(alert("something"), 1000); 
}).on('mouseup mouseleave', function() { 
clearTimeout(timeoutId); 
}); 

</script> 
</body> 
</html> 
+0

コンソールでどのようなエラーが発生していますか? jQueryをインクルードしましたか? – j08691

答えて

4

アラートがすぐに呼び出されるという問題があります。関数を呼び出すのではなく、setTimeoutに関数を渡す必要があります。私はあなたのコードをリファクタリングして関数にして、マウスを動かさないとアラートが1秒後に表示されます。

var timeoutId = 0; 
 

 
$('#seconds').on('mousedown', function() { 
 
    timeoutId = setTimeout(function(){alert("something")}, 1000); 
 
}).on('mouseup mouseleave', function() { 
 
    clearTimeout(timeoutId); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="seconds">30</button>

+0

こんにちは@ジョーダン、コール関数と関数の違いは何ですか?サンプルの仕組みを説明できますか? – user305883

+1

setTimeoutは、最初の引数として30秒後に呼び出せる関数が必要です。ユーザはもともと関数の呼び出しであるalert()を渡しました。アラートが関数です。ですから、ラムダや匿名関数でアラートをラップすることで、setTimeoutに必要なときに呼び出せる関数を与えています。 –

関連する問題