0

リンクにいくつかのクリックイベントをバインドするためにjqueryを使用しています。次のコードを使用して、リンクのhrefをajax経由で変更できましたが、hrefが変更されてリンクをクリックしようとしても何も起こりません。

私が見逃している明らかなエラーを誰かが見つけられるかどうか疑問に思っています。

    $('a.shortlist_action').bind('click',function(){

        item = $(this);
        href = item.attr('href');

        parent = $(this).parent('.shortlist_action_container');
        item = $(this);

        $.ajax({
          url: $(this).attr('href'),
          success: function(data) {
                item.addClass('largeviewplannerbutton');

                item.attr("href", '/myaccount/planner');
            }
          }

        });
        // stop event propagation here
        return false;
});

ありがとうございました。

4

3 に答える 3

1

あなたのコメントが示唆するように、イベントの伝播を妨げている削除return false..

javascript で「false を返す」場合とその理由を参照してください。詳細については。

于 2012-11-15T20:51:42.467 に答える
1
// stop event propagation here
return false;

return false伝播デフォルトの動作の両方を防ぎます。後者は、<a href>要素のハイパーリンクをたどっています。実際にはここでのみ呼び出す必要があります (関数シグネチャe.stopPropagation()で定義します)。e

于 2012-11-15T20:53:05.617 に答える
1

すでに述べたようreturn falseに、jQuery イベント ハンドラーでは、そのイベントの既定の動作が妨げられます。もちろん、リンクをクリックしたときの既定の動作は、リンクの .xml 内の URL に移動することhrefです。

したがって、現在のコードでは、クリックごとに現在の URL への Ajax 呼び出しが行われ、hrefデフォルトのナビゲーションはありません。つまり、要素を最初にクリックすると、元の URL への Ajax 呼び出しが行われ、その後 URL が変更されます。デフォルトのナビゲーションはありません。次に 2 回目のクリックで、新しいURL への Ajax 呼び出しが行われますが、ここでもデフォルトのナビゲーションはありません。

最初のクリックのみで Ajax を実行して を更新しhref、2 回目以降のクリックでは新しい URL への標準的なナビゲーションのみを実行する必要がある場合は、 の代わりに.one()メソッド.bind()を使用する必要があります。この.one()メソッドは、要素ごとに 1 回だけ実行されるイベント ハンドラーをバインドします。

または、関数内に追加のロジックを追加して、デフォルトのクリック動作を変更するかどうか、およびキャンセルhrefに戻るかどうかを決定する必要があります。および/または(または) へfalseの呼び出しを追加して、特定のリンクでクリック ハンドラーが不要になったらクリック ハンドラーを削除します。.off().unbind()

于 2012-11-15T21:03:39.633 に答える