2

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

我猜 setTimeout 是要使用的函数。下面是我的代码。我只希望 timeout_trigger 的警报在更改事件发生 2 秒后触发。更改事件警报会触发,但不会触发 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);

        }); 

我做错了什么?

4

3 回答 3

3

几点注意事项:

  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);
     });
    

现场演示!(见控制台输出)

于 2013-05-31T00:56:50.400 回答
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);
}); 
于 2013-05-31T00:54:56.333 回答
0

尝试在此处删除引号和括号setTimeout(timeout_trigger, 2000);

也许需要括号,但我认为不需要。

于 2013-05-31T00:54:20.210 回答