当我点击页面中的链接时,它并不总是在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>
答案 0 :(得分:1)
正如您最初编写的问题,您的第一个渲染链接示例:
<a href='#' class="deleteAgentNotes">Delete</a>
与事件处理程序中的选择器"a.addLink"
不匹配:
$(document).on("click", "a.addLink", function () {
因此,当您单击该呈现的链接时,它与事件处理程序不匹配,因此没有任何反应。如果这是你想要这行代码的渲染链接,那么它应该是这样的:
$(document).on("click", ".deleteAgentNotes", function () {
此外,由于我发现您正在更改点击链接上的href
,您应该意识到委托事件处理程序在实际链接上处理点击后运行,因此链接中的href将会首先执行操作,如果将浏览器带到新页面,则委派的事件处理程序甚至不会有机会运行。因此,基本上不可能使用委托事件处理来覆盖链接的行为,因为默认行为已经发生在委托事件处理程序获取事件之前。如果您希望链接具有的ONLY行为是通过委派的事件处理程序,那么您可能希望将<a>
标记更改为<span>
,因此没有对单击处理程序的默认处理,然后处理完全点击您的事件处理程序。如果您希望在单击时将用户带到新页面,则只需在事件处理程序中执行window.location = "your url"
。没有要求使用链接。