【问题标题】:why would this jquery live enter an infinite loop, where an almost identical one does not?为什么这个 jquery live 会进入一个无限循环,而一个几乎相同的却没有?
【发布时间】:2011-06-28 13:39:01
【问题描述】:

我正在尝试创建一个表单,其中的值根据选择中的更改或文本字段中的更改进行更新。

我从

开始 jQuery('select[name=measure]','form').live('change',function(){ 警报(“触发”); });

然后我添加了用户更改文本框时的键位

jQuery('select[name=measure],input[name=amount]','form').live('change keyup',function(){ 警报(“触发”); });

由于某种原因,当我选择一个选项时,它会进入一个无限循环,并在 keyup 时触发多次(尽管不是无限次)。

当我换成

...直播('keyup',函数()...

对文本框的更改只会触发一次。 我可以将它们分成两个单独的 .live 事件,然后创建一个单独的函数,但这似乎不是有效的代码。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    它将changekeyup 附加到select[name=measure]input[name=amount]

    我怀疑您是否希望 input 有一个 change 事件,而 select 有一个 keyup 事件。

    我建议您将这两个现场活动分开。您可能也不需要form 选择器。

    $('select[name=measure]').live('change', SomeFunction);
    
    $('input[name=amount]').live('keyup', SomeFunction);
    
    function SomeFunction() {
        // this isn't inefficient
    }
    

    工作示例:http://jsfiddle.net/K7586/


    或者你可以使用delegate()

    $("form")
        .delegate("input[name=amount]", "keyup", SomeFunction)
        .delegate("select[name=measure]", "change", SomeFunction);
    
    function SomeFunction() {
        // this isn't inefficient
    }
    

    【讨论】:

    • 感谢猎人。我在想这不是最有效的代码使用。我将使用委托,因为我知道委托应该更高效,而且它看起来肯定是更好的代码。干杯
    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 2014-01-04
    • 2020-04-28
    • 2011-12-08
    • 1970-01-01
    • 2021-08-16
    • 2018-01-13
    相关资源
    最近更新 更多