【问题标题】:livequery fires multiple timeslivequery 触发多次
【发布时间】:2009-12-17 19:57:36
【问题描述】:

代码如下:

$(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 中调用什么样的函数并不重要,不管它是什么,它都会触发多次。

【问题讨论】:

    标签: jquery livequery


    【解决方案1】:

    那是因为每次加载那部分 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!'});
      });
    });
    

    【讨论】:

      【解决方案2】:

      看起来我只需要让监听器过期。现在工作。变化如下:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多