可以在onchange事件上设置setTimeout吗?

时间:2013-05-31 00:50:28

标签: jquery

我想在几秒钟后延迟执行一些代码。

我猜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);

        }); 

我做错了什么?

3 个答案:

答案 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)

一些注意事项:

  1. timeout_trigger未在setTimeout字符串中定义,该字符串似乎有自己的范围。传递函数本身而不是传递字符串来解决 问题:setTimeout(timeout_trigger, 2000)
  2. 调用函数后,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);
     });
    
  3. A live demo!(请参阅控制台输出)

答案 2 :(得分:0)

尝试在setTimeout(timeout_trigger, 2000);删除引号和引号。

也许需要这些parens,但我认为不是。