Jquery 多个事件可避免多次调用

Jquery 多个事件可避免多次调用,jquery,Jquery,我有一个文本框,我正在为live()使用keyup事件-编写新代码的人应该使用on()-但问题是人们可以复制和粘贴值,拖动值或使用自动完成来更改值 为了解决此问题,我发现我可以使用以下方法: $(".textbox").live("keyup change input", function(){ 这是可行的,但问题显然是在某些情况下和某些浏览器中多次调用该函数。我似乎想不出一个办法来避免这个问题。有人有什么快速的想法吗?如果代码被多次调用并不是世界末日,因为它只是在更新页面上的一些值,但是学习

我有一个文本框,我正在为live()使用keyup事件-编写新代码的人应该使用on()-但问题是人们可以复制和粘贴值,拖动值或使用自动完成来更改值

为了解决此问题,我发现我可以使用以下方法:

$(".textbox").live("keyup change input", function(){
这是可行的,但问题显然是在某些情况下和某些浏览器中多次调用该函数。我似乎想不出一个办法来避免这个问题。有人有什么快速的想法吗?如果代码被多次调用并不是世界末日,因为它只是在更新页面上的一些值,但是学习如何解决这个问题会很好!谢谢


编辑:我以前忘了提到它,但我使用的是jQuery 1.4.4,on()是不可用的。

建议和更正

函数
$.live()
已弃用。因此,请更改以下代码:

$(".textbox").live("keyup change input", function(){
致:


这将解析多个事件的附件。

如果发生多个事件,但值未更改,则我们可以忽略这些事件。因此,您可以维护旧值并与新值进行比较,以决定是否应执行某些操作:

$(".textbox").live("keyup change input", function(e){
    if($(this).attr("old-value") !== $(this).val()){
        // do something

        // update old-value
        $(this).attr("old-value", $(this).val());
    }
});

此处演示:

$(“body”).on(“键控更改输入”,“文本框”,函数(e){if(e.type==”键控“)....@Kirix,如果用户通过右键单击将文本复制并粘贴到框中?会发生什么?哦,对不起…时间太晚了…我认为
键控更改输入
是3个事件,比如
聚焦焦点输出
感谢您的回答。不过快速提问:不会调用$(“body”)。解除绑定(“单击”)删除所有点击事件?@James是的,确实如此。然后它只会添加…Oops…Taht应该是
.unbind(“keyup”).unbind(“change”).unbind(“input”)
。对不起,我错了。但是页面上还有数百个其他事件,我无法删除所有这些事件。好的,只需省略
.unbind()
s。那么,我们不回到同样的情况吗?当用户按下chrome中的一个键时,该函数将被调用多次吗?
$(".textbox").live("keyup change input", function(e){
    if($(this).attr("old-value") !== $(this).val()){
        // do something

        // update old-value
        $(this).attr("old-value", $(this).val());
    }
});