2012-07-11 54 views
1

我正在执行关键字或粘贴上的Ajax请求。问题在于,当用户使用Control-V进行粘贴时,会发生两个Ajax请求 - 一个用于粘贴,一个用于键入。关键字或粘贴上的Ajax

$("#my-form").bind('keyup paste', function(e) {...} 

什么是绑定在keyup或粘贴上的好方法?

+1

因为你得到的'keyup'事件触发时用户贴,你为什么需要绑定'paste'分开? – lanzz 2012-07-11 20:23:33

+1

@lanzz右键单击 - >粘贴 – TheZ 2012-07-11 20:23:58

+2

理想情况下,您可以存储内容,然后检查每次事件触发时是否更改了内容,这样它只会运行一次。你可以绑定两个(或更多)事件,即使连续两次触发,只有第一个会看到更改并运行。 – TheZ 2012-07-11 20:29:52

回答

5

您可以使用setTimeout/clearTimeout延迟事件,因此它只触发一次。

$("#my-form").bind('keyup paste', function(e) { 
    clearTimeout($(this).data('timeout')); 
    $(this).data('timeout', setTimeout(function(){ 
     // your code 
    }, 200)); 
}); 

DEMO:http://jsfiddle.net/4b7y5/