小提琴 - http://jsbin.com/AYeFEHi/1/edit
任何人都可以解释为什么这不起作用? (在Linux上运行Chromium)
我正在尝试仅在按钮停止2秒时执行警告框,如果不是则清除超时功能。
<!DOCTYPE html>
<html>
<head>
<title>Testing onmousedown setTimeout alert</title>
<meta charset='utf-8'>
<meta name='viewport' content='initial-scale=1.0'>
<script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.min.js'></script>
<script type='text/javascript'>
function call() {
alert('Hello World!');
}
$("#alertme").on('mousedown touchstart', function() {
setTimeout(call, 2000);
});
$("#alertme").on('mouseup touchend', function() {
clearTimeout(call, 0);
});
</script>
</head>
<body>
<button id="alertme">Alert me</button>
</body>
</html>
答案 0 :(得分:3)
这不是clearTimeout
的工作方式。您需要将setTimeout
返回的值传递给它。
function call() {
alert('Hello World!');
}
var callTimeout = null; // hold onto the identifier for the timeout
$("#alertme").on('mousedown touchstart', function() {
callTimeout = setTimeout(call, 2000);
});
$("#alertme").on('mouseup touchend', function() {
clearTimeout(callTimeout); // clear the timeout identifier we saved.
});
您可能希望将其包装在jQuery页面就绪回调中,以便脚本可以在页面的任何位置:
$(function() {
var call = function() {
alert('Hello World!');
}
var callTimeout = null;
$("#alertme").on('mousedown touchstart', function() {
callTimeout = setTimeout(call, 2000);
});
$("#alertme").on('mouseup touchend', function() {
clearTimeout(callTimeout);
});
});