Javascript 基于键控或粘贴的Ajax

Javascript 基于键控或粘贴的Ajax,javascript,jquery,Javascript,Jquery,我正在对keyup或paste执行Ajax请求。问题是,当用户使用Control-V进行粘贴时,会出现两个ajax请求——一个用于粘贴,一个用于keyup $("#my-form").bind('keyup paste', function(e) {...} 在keyup或paste上绑定的好方法是什么?您可以使用setTimeout/clearTimeout延迟事件,因此它只触发一次 $("#my-form").bind('keyup paste', function(e) { cl

我正在对keyup或paste执行Ajax请求。问题是,当用户使用Control-V进行粘贴时,会出现两个ajax请求——一个用于粘贴,一个用于keyup

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

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

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

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

演示:

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

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

演示:

既然用户粘贴时触发了
keyup
事件,为什么需要单独绑定
paste
?理想情况下,您可以存储内容,然后在每次事件触发时检查内容是否已更改,这样它将只运行一次。您可以绑定两个(或多个)事件,即使两个事件连续触发,也只有第一个事件会看到更改并运行。@z最终这样做,效果很好。既然用户粘贴时触发了
keyup
事件,为什么需要分别绑定
paste
,然后检查它们是否在每次事件触发时都进行了更改,这样它将只运行一次。您可以同时绑定两个(或多个)事件,即使两个事件连续触发,也只有第一个事件会看到更改并运行。@TheZ最终这样做了,工作正常。