0

ページ内のリンクをクリックしても、JavaScript に登録されない場合があります。これは MVC ソリューションであり、Site.Master ページ内にカプセル化されたビューの 1 つです。

この最初の例は機能します。ページ: (someView.aspx)

<%: Html.ActionLink("Add", "AgentNotesCreate", "AgentNotes", new { id = Model.AgentId }, new { @class="addLink"} )%>

(レンダリングされたリンク)

<a class="addLink" href="/AgentNotes/AgentNotesCreate/152">Add</a>

Javascript:

$(function () {
$(document).on("click", "a.addLink", function () {
    var newHref = $(this).attr("href");

    if (newHref.split("?").length > 1) {
        // There's already a query string attached - we're adding our own on top.
        newHref += "&returnToken=" + $("#page_redirect_token").val();
    }
    else {
        // We're adding the only querystring parameter
        newHref += "?returnToken=" + $("#page_redirect_token").val();
    }

    $(this).attr("href", newHref);
});

});

ただし、上記と同じ JavaScript を参照するこの 2 番目の例は機能しません。$(document)... 行に移動し、関数全体をスキップするため、returnToken が URL に追加されません。

2 番目の例: (someSecondView.aspx)

<%:Html.ActionLink("Add", "EMDProductShelfCreate", "EMDProductShelf", new{id = Model.PersonId}, new{@class="addLink"} ) %>

(レンダリングされたリンク)

<a class="addLink" href="/EMDProductShelf/EMDProductShelfCreate/45">Add</a>
4

1 に答える 1

1

あなたの質問が最初に書かれたように、レンダリングされたリンクの最初の例:

<a href='#' class="deleteAgentNotes">Delete</a>

"a.addLink"イベント ハンドラーのセレクターと一致しません:

$(document).on("click", "a.addLink", function () {

したがって、レンダリングされたリンクをクリックしても、イベント ハンドラーと一致しないため、何も起こりません。それがレンダリングされたリンクで、このコード行を機能させたい場合は、次のようにする必要があります。

$(document).on("click", ".deleteAgentNotes", function () {

また、hrefリンクのクリックを変更していることがわかったので、実際のリンクでクリックが処理された後にデリゲートされたイベント ハンドラーが実行されることを認識する必要があります。ブラウザーから新しいページに移動すると、委任されたイベント ハンドラーを実行する機会すらありません。したがって、委任されたイベント ハンドラーがイベントでショットを取得する前に、既定の動作が既に発生しているため、基本的に、委任されたイベント処理を使用してリンクの動作をオーバーライドすることはできません。リンクに必要な唯一の動作が委任されたイベント ハンドラーを介したものである場合は、おそらく<a>タグを<span>そのため、クリック ハンドラーの既定の処理はなく、イベント ハンドラーでクリックを完全に処理します。クリック時にユーザーを新しいページに移動させたい場合はwindow.location = "your url"、イベント ハンドラーで行うだけです。そのためにリンクを使用する必要はありません。

于 2013-10-09T20:28:22.020 に答える