0


0

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のリンクを2回クリックすると、livequery関数が2回起動します。 #page2のリンクをクリックしてから、#page1のリンクを3回クリックすると、livequery関数が3回起動します。

私はこれに関する言葉に途方に暮れています。 助けてください。 livequery内でどのような関数を呼び出すかは問題ではありません。それが何であれ、複数回起動します。

2 Answer


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


リスナーを期限切れにする必要があったようです。 今動作します。 変更点は次のとおりです。

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