jQuery .live()导致并行循环

时间:2010-02-25 16:50:17

标签: jquery

让我们开始吧;单击一个插入AJAX的LI元素,弹出一个带文本输入的对话框,当输入大于100时,提交信息以便对服务器进行验证。这是它的样子:

$("li").live("click", function() { 
    $("#dialog1").dialog('open');
    $("#pin").focus();
    $("#pin").keyup(function() {
        var trigger = $("#pin").val;            
        if (trigger > 100) { // Submit for verification, otherwise do nothing }
        }
    });

我遇到的问题是它第一次正常运行。再次单击LI元素时,keyup函数将运行两次。如果再次单击它,它将运行三次。这是控制台转储的样子:

首先点击: 1 10 100

第二次点击: 1 1 10 10 100 100

第三: 1 1 1 10 10 10 100 100 100

任何想法都会非常感激。如果我错误地注射了我的AJAX,请告诉我。

2 个答案:

答案 0 :(得分:6)

我认为您的问题是您不断向#pin元素添加事件处理程序。所以第一次只附加一个处理程序。第二次两个处理程序等等。

在点击处理程序之外移动$(“#pin”)。keyup。

答案 1 :(得分:0)

jQuery .live在1.9上删除了。这是正确的方法:

  

自jQuery 1.7以来,.live()方法已被弃用   在1.9中删除。我们建议升级代码以使用.on()方法   代替。要完全匹配$(“a.foo”)。live(“click”,fn),例如,   你可以写$(document).on(“click”,“a.foo”,fn)。更多   信息,请参阅.on()文档。在此期间,jQuery   迁移插件可用于恢复.live()功能。

通过http://jquery.com/upgrade-guide/1.9/#live-removed