2013-10-09 45 views
0

當我點擊頁面中的鏈接時,它並不總是在javascript中註冊。這是一個MVC解決方案,這是封裝在Site.Master頁面中的一個視圖。爲什麼點擊事件沒有在關聯的javascript中註冊?

第一個例子有效。 頁:(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

難道你不能預防嗎? – Dvir

+0

看起來不錯,你可以提供不工作的鏈接的渲染標記嗎? –

+0

JavaScript是由其他人編寫的,但我使用它...並且它對第一個ActionLink項目正常工作。 – silvenwolf

回答

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"即可。沒有要求爲此使用鏈接。

+0

感謝您向我展示 - 我複製了呈現的HTML錯誤行。我已更新我的問題,以顯示此 – silvenwolf

+0

@silvenwolf - 好的,然後閱讀我剛剛添加到我的答案的段落,因爲您可能有不同的問題。 – jfriend00

+0

我跟着你,但那麼這將如何適用於AgentNotes的第一個ActionLink - 它會進入javascript並將returntoken附加到鏈接的末尾?這是第二個(EMDProductShelf的ActionLink),雖然用相同的格式編寫,但不起作用。 – silvenwolf

相關問題