2012-07-18 183 views
0

我有这样的代码延迟上(“点击”)事件

$("input").on('keyup', function() { 
$("block"),slideDown("slow")...... 

问题是taht当我写的快速块将再次和比我写的阿恩慢得多做了“动漫”

有没有另一个事件可以用来在代码完成后运行代码?我们可以说,我停止编写代码,然后执行代码500ms,然后执行代码。

+0

你能不能用时,'input'失去焦点,并且其值发生了变化,这将触发'change'事件? – 2012-07-18 10:06:57

回答

0

像这样的事情是我用什么之前:

$(input).keyup(onKeyUp); 

/** 
* Handler for the keyup event 
*/ 
function onKeyUp() { 
    //reset 
    clearTimeout(myTimer); 

    myTimer = setTimeout(otherFunction, 500); 
} 

现在otherFunction会在500毫秒之后被调用,但是每个keyup事件定时器将被重置。

+2

你不应该将字符串传递给'setTimeout';它使用'eval()'幕后**** ***!相反,只要'setTimeout(otherFunction,500);' – Matt 2012-07-18 10:12:28

+0

感谢提示马特。总是善于学习新事物! – Jurgen 2012-07-18 10:17:33

1
function throttle(fn, time){ 
    var timer = 0; 
    return function() { 
     clearTimeout(timer); 
     timer = setTimeout($.proxy(fn, this), time); 
    }; 
} 

$("input").on('keyup', throttle(function() { 
    $("block").slideDown("slow") 
},500)); 

节气门返回一个新函数,该函数在函数上次调用后经过500毫秒后调用旧函数。

0

尝试使用...

function slideDown(){ 
    ... 
}  
// call 
setTimeout(function(){ slideDown(); }, 1000); 
+0

你刚刚遭受W3Schools的考验:不要将字符串传递给'setTimeout'。而且,你的代码只是延迟了这个功能 - 它并没有考虑到“停止写入”。 – pimvdb 2012-07-18 10:20:48