0

コードは次のとおりです。

$(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 内で呼び出す関数の種類は関係ありません。それが何であれ、複数回起動します。

4

2 に答える 2

2

これは、その ajax されたコンテンツをロードするたびに 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!'});
  });
});
于 2009-12-17T20:16:25.837 に答える
1

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

$("#content .main .new").livequery( function(){
    Boxy.alert("Sample Alert", null, {title: 'Alert!'});
    $("#content .main .new").expire();
});
于 2009-12-17T20:28:15.303 に答える