为什么点击事件没有在关联的 javascript 中注册

Why is the click event not being registered in the associated javascript?

本文关键字:关联 javascript 注册 事件 为什么      更新时间:2023-09-26

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

第一个示例有效。页面: (某视图.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,不起作用 - 它转到$(文档(...,然后跳过整个函数,因此没有将 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>

正如您的问题最初编写的那样,您的第一个呈现链接示例:

<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"即可。 不需要为此使用链接。