我想在几秒钟后延迟执行一些代码。
我猜setTimeout是要使用的函数。以下是我的代码。我只想在更改事件发生2秒后触发timeout_trigger警报。更改事件警报会触发,但不会触发timeout_trigger
function timeout_trigger() {
alert('time out trigger called');
alert($(this).attr('id') + ' on change ' + $(this).val());
}
$('input[id$="accountLookup"]').change(function() {
alert('click function called');
setTimeout('timeout_trigger()', 2000);
});
我做错了什么?
答案 0 :(得分:2)
从函数名中删除引号。
function timeout_trigger() {
alert('time out trigger called');
alert($(this).attr('id') + ' on change ' + $(this).val());
}
$('input[id$="accountLookup"]').change(function() {
alert('click function called');
setTimeout(timeout_trigger, 2000);
});
答案 1 :(得分:2)
一些注意事项:
timeout_trigger
未在setTimeout
字符串中定义,该字符串似乎有自己的范围。传递函数本身而不是传递字符串来解决 问题:setTimeout(timeout_trigger, 2000)
。调用函数后,this
将引用调用它的window
对象而不是更改的元素。因此,我建议采用以下结构:
function timeout_trigger() {
console.log($(this).attr('id') + ' on change ' + $(this).val());
}
$('input[id$="accountLookup"]').change(function() {
// Bind the current `this` to a local variable, so we can access
// it in the anonymous function below. Then, use
// `timeout_trigger.call` to bind `element` to its `this` value.
var element = this;
setTimeout(function () { timeout_trigger.call(element) }, 2000);
});
A live demo!(请参阅控制台输出)
答案 2 :(得分:0)
尝试在setTimeout(timeout_trigger, 2000);
删除引号和引号。
也许需要这些parens,但我认为不是。