2013-02-24 96 views
9

我遇到這個有趣的情況下工作:<a>鏈接無法通過單擊工作,只能通過「在新標籤中打開鏈接」命令

<ul> 
    @foreach (var item in Model) 
    { 
     <li> 
     <a href="@Url.Action("Details", "Product", new { id = item.Id })" >@item.Name</a> 
     </li> 
    } 
</ul> 

當我點擊一個鏈接,沒有發生,產品詳細頁面打不開。但我做「在新標籤中打開鏈接」,然後打開。這可能是什麼原因?

+4

一些JavaScript的魔力。 – Musa 2013-02-24 08:46:05

+3

任何JS可能會阻止代碼中錨定標記的默認操作? – Mortalus 2013-02-24 08:46:51

+0

你可以檢查爲該剃刀視圖生成的HTML嗎?我懷疑它在href屬性中生成一個空的url。 – ThomasArdal 2013-02-24 08:48:00

回答

25

您有一些javascript代碼阻止了要執行的錨標記的默認操作。您可以檢查FireBug或Chrome DevTools中的Network選項卡,以查看是否在點擊鏈接時發出了一些AJAX請求。您可以嘗試排除JavaScript文件,直到找到正在執行此操作的人。

+8

在chrome上,DevTools有一個名爲「Event listeners」的視圖,它允許您識別任何此類事件處理程序。一個缺點是它不顯示繼承的處理程序。 – 2013-07-09 10:59:57

+0

舊帖子,但答案幫助我今天!在文檔點擊處理程序上有一個「返回false」錯誤...謝謝! – Wildcard27 2014-10-12 10:50:25

+0

查看Response頭部幫助我追蹤了爲什麼Facebook拒絕一個到Facebook羣組的簡單鏈接。謝謝! – cyrf 2016-04-27 07:17:22

1

試試這個代碼...

<a href="http://google.com/" onclick="location.replace('http://google.com/'),'_top'">Google</a> 
2

達倫正確給出,它肯定是Ajax請求(POST或GET),導致無法正常工作如你所期望的鏈接JavaScript代碼。

但是,如果您使用了外部資源,則可能很難糾正min文件中的錯誤。

我建議使用jQuery的onclick事件直列規避AJAX調用

<a href="http://foo.bar/" onclick="window.open('https://www.foo.bar/culrsteam')">Foo</a>

您可以額外使用window.open('https://www.foo.bar/culrsteam', '_blank')target='_blank'

1

,如果該地址沒有可能出現這種情況在href屬性中有傳輸協議。一個例子是將本地主機鏈接爲<a href="localhost"></div>而不是<a href="http://localhost"></div>。如果這樣做,您會看到Google Chrome會取消狀態,並且在Safari中會出現一個對話框,詢問應該在哪個應用程序中打開鏈接,因爲傳輸協議未知。在PHP中將鏈接設置爲$_SERVER['HTTP_HOST']時遇到此問題。

要點是,請確保您將傳輸協議保留在鏈接前面http://,https://,ftp://或其他任何其他地方。

2

也許你使用JavaScript阻止了標記的重定向事件。

例如:

$(document).on('click', 'a.thatTag', function (e) { 
    // ... 
    e.preventDefault(); 
}); 

.preventDefault()防止重定向。