livequery多次发射

时间:2009-12-17 19:57:36

标签: jquery livequery

以下是代码:

$(document).ready(function(){
  $(".menu ul li a").click( function(){
    curpage = $(this).attr('href');
    loadpage(curpage);
  });
});

function loadpage(){
    switch (curpage){
    case "#page1":
        getpage1();
    break;
    case "#page2":
        getpage2();
    break;
    }
}

function getpage1() {
    $("#content .main").load("/page1.htm");
    $("#content .main .new").livequery( function(){
        Boxy.alert("Sample Alert", null, {title: 'Alert!'});
    });
}

function getpage2() {
    $("#content .main").load("page2.htm");
}

所以,如果我点击#page1的链接,事情会按预期工作。如果我单击#page2的链接,事情就会按预期工作。但是当我第二次单击#page1的链接时,livequery函数将触发两次。我可以单击#page2的链接,然后第三次单击#page1的链接,livequery函数将触发三次。

我对这个问题感到茫然。请帮忙。无论我在livequery中调用什么样的函数,无论它是什么,它都会多次触发。

2 个答案:

答案 0 :(得分:2)

那是因为每次加载那些ajaxed内容时你都绑定了livequery函数......

您不必这样做,这是使用livequery的优势......

移动这段代码:

$("#content .main .new").livequery( function(){
        Boxy.alert("Sample Alert", null, {title: 'Alert!'});
    });

getpage1()开始进入document.ready块,如下所示:

$(document).ready(function(){
  $(".menu ul li a").click( function(){
    curpage = $(this).attr('href');
    loadpage(curpage);
  });

  $("#content .main .new").livequery( function(){
      Boxy.alert("Sample Alert", null, {title: 'Alert!'});
  });
});

答案 1 :(得分:1)

看起来我只需要使听众过期。现在工作。这是改变:

$("#content .main .new").livequery( function(){
    Boxy.alert("Sample Alert", null, {title: 'Alert!'});
    $("#content .main .new").expire();
});