0

当我单击页面中的链接时,它并不总是在 javascript 中注册。这是一个 MVC 解决方案,这是封装在 Site.Master 页面中的视图之一。

这个第一个例子有效。页面:(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,但不起作用 - 它转到 $(document)... 行,然后跳过整个函数,因此没有将 returnToken 添加到 URL。

第二个例子:(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点击链接,您应该意识到委托事件处理程序在实际链接上处理点击之后运行,因此链接中的 href 将首先执行,如果需要浏览器到一个新页面,委托的事件处理程序甚至没有机会运行。因此,基本上不可能使用委托事件处理来覆盖链接的行为,因为默认行为在委托事件处理程序处理事件之前已经发生。如果您希望链接具有的唯一行为是通过您的委托事件处理程序,那么您可能希望将<a>标签更改为<span>所以点击处理程序没有默认处理,然后在您的事件处理程序中完全处理点击。如果您想在单击时将用户带到新页面,那么只需window.location = "your url"在事件处理程序中执行。不需要为此使用链接。

于 2013-10-09T20:28:22.020 回答