1
//deep linking 
$.fn.ajaxAnim = function() {
    $(this).animW();
    $(this).html('<div class="load-prog">loading...</div>');
}

$("document").ready(function(){
    contM = $('#main-content');
    contS = $('#second-content');
    $(contM).hide();
    $(contM).addClass('hidden');
    $(contS).hide();
    $(contS).addClass('hidden');
    function loadURL(URL) {
        //console.log("loadURL: " + URL);
        $.ajax({ url: URL, 
                beforeSend: function(){$(contM).ajaxAnim();},
                type: "POST",
                dataType: 'html',
                data: {post_loader: 1},
                success: function(data){
                    $(contM).html(data);
                    $('.post-content').initializeScroll();
                    }
        });
    }

    // Event handlers
    $.address.init(function(event) {
        //console.log("init: " + $('[rel=address:' + event.value + ']').attr('href'));
    }).change(function(event) {
        evVal = event.value;
        if(evVal == '/'){return false;}
        else{
            $.ajax({ url: $('[rel=address:' + evVal + ']').attr('href'), 
                    beforeSend: function(){$(contM).ajaxAnim();},
                    type: "POST",
                    dataType: 'html',
                    data: {post_loader: 1},
                    success: function(data){
                        $(contM).html(data);
                        $('.post-content').initializeScroll();
            }});
        }
        //console.log("change");
    })

    $('.update-main a, a.update-main').live('click', function(){
        loadURL($(this).attr('href'));
        return false;
    });

  $(".update-second a, a.update-second").live('click', function() {
    var link = $(this);
        $.ajax({ url: link.attr("href"),
                beforeSend: function(){$(contS).ajaxAnim();},
                type: "POST",
                dataType: 'html',
                data: {post_loader: 1},
                success: function(data){
                    $(contS).html(data);
                    $('.post-content').initializeScroll();
        }});
        return false;
  });

});

便利なURLを維持しながら、jqueryアドレスを使用してコンテンツを更新しています。メインナビゲーションでリンクをクリックすると、URLは適切に更新されますが、リンクがajaxで動的に読み込まれると、URLアドレス関数が機能しなくなります。

「クリック」イベントをライブにして、動的にロードされたリンクを介してコンテンツをロードできるようにしましたが、アドレスイベントリスナーをライブにすることはできないようですが、これがこれを機能させる唯一の方法のようです。これを変更すると、構文が間違っていますか?

$.address.change(function(event) {

これに:

$.address.live('change', function(event) {

または、ライブメソッドはこのプラグインでは機能しませんか?

4

3 に答える 3

1

jqueryアドレスプラグインファイルに移動し、次の行を置き換えました。

$.fn.address = function (fn) {
    $(this).click(function() {

これとともに :

 $.fn.address = function (fn) {
        $(this).live('click',function() {

動的にロードされるすべてのリンクをアドレスプラグインイベントリスナーに応答させる

于 2010-04-03T21:14:06.830 に答える
0

liveメソッドはjquerydom要素のみを機能させます。プラグインではありません。

liveメソッドは、dom要素がHTMLに動的に追加されたかどうかを検出し、それにイベントをバインドします。あなたが言おうとしているのは、「「アドレス」プラグインがhtmlに表示されている場合は、イベント「変更」をそれにバインドする」ということです。「address」プラグインはdom要素ではなく、機能しません。

于 2010-04-03T11:02:27.470 に答える
0

まず、簡単な答え:いいえ、機能しません:)

理由の部分.live()イベントを処理します。カスタムであるかどうかは関係ありません(ほとんどの場合)。.live()たとえば、次のように呼び出すと、うまく機能します。

$(".myThing").live('click', functionToRun);

.live()DOMのルートにイベントハンドラーを作成し、イベントがバブルアップするのを待ちます。重要な部分:新しい要素または古い要素は同じようにイベントをバブルし、それらがどのようにロードされたかは関係ありません。イベントがバブルアップしてDOMルートに到達すると、.live()イベントハンドラーは、セレクターがイベントを持っていた要素と一致するかどうかを確認し、一致する場合は実行します。

プラグインを使用すると、ちょっと新しいことを言って、その上でコードを実行したいと思うでしょう...ご覧のとおり、これは.live()実際の内部での動作とは大きく異なります。

于 2010-04-03T11:35:43.860 に答える