2013-02-24 10 views
9

spotykam tę ciekawą sytuację:<a> link nie działa, klikając, działają tylko przez „Otwórz odnośnik w nowej karcie” polecenia

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

Kiedy klikam odnośnik, nic nie stało, produkt Szczegóły strona nie otwiera się. Ale robię "Otwórz link w nowej karcie", a następnie otwiera. Jaki może być powód?

+4

Niektóre magia JavaScript. – Musa

+3

Dowolny JS, który może zapobiec domyślnej akcji znacznika zakotwiczenia w twoim kodzie? – Mortalus

+0

Czy możesz sprawdzić wygenerowany kod HTML dla tego widoku maszynki Razor? Podejrzewam, że generuje pusty adres URL w atrybucie href. – ThomasArdal

Odpowiedz

25

Masz trochę kodu javascript, który uniemożliwia wykonanie domyślnej akcji znacznika zakotwiczenia. Możesz sprawdzić kartę Network w narzędziu FireBug lub Chrome DevTools, aby sprawdzić, czy niektóre żądania AJAX są tworzone po kliknięciu linku. Możesz spróbować wyłączyć pliki javascript, dopóki nie znajdziesz tego, który to robi.

+8

Na chrome, DevTools ma widok o nazwie "Detektory zdarzeń", który pozwala zidentyfikować takie programy obsługi zdarzeń. Jedną wadą jest to, że nie pokazuje ona dziedziczonych procedur obsługi. –

+0

Stary post, ale odpowiedź pomogła mi dzisiaj!miał zabłąkane 'return false' na uchwycie do obsługi dokumentu ... Dzięki! – Wildcard27

+0

Przeglądanie nagłówków odpowiedzi pomogło mi znaleźć przyczynę odrzucenia przez FB prostego linku do grupy na Facebooku. Dzięki! – cyrf

1

Spróbuj tego kodu ...

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

Prawidłowo podane przez Darrena, to na pewno jakiś kod JavaScript, który jest wysłanie żądania AJAX (POST lub GET), które uniemożliwiają funkcjonowanie link jak można się spodziewać .

Jeśli jednak korzystasz z zewnętrznego źródła, poprawienie błędu w plikach min może być trudne.

Proponuję użyć inline jquery onclick zdarzeń obejście wywołania AJAX

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

Można dodatkowo używać window.open('https://www.foo.bar/culrsteam', '_blank') jak z target='_blank'

1

może się to zdarzyć, jeśli adres nie mieć protokół przesyłania w atrybucie href. Przykładem byłoby połączenie localhost jako <a href="localhost"></div> zamiast <a href="http://localhost"></div>. Zobaczysz, że Google Chrome nada status anulowania, jeśli to zrobisz, aw Safari pojawi się okno dialogowe z pytaniem, do której aplikacji ma zostać otwarty link, ponieważ protokół transferu jest nieznany. Napotkano ten problem podczas ustawiania linku do $_SERVER['HTTP_HOST'] w PHP.

Kluczowy punkt, upewnij się, że opuściłeś protokół transferu przed linkiem, czy to http://, https://, ftp:// czy cokolwiek innego.

2

Być może uniemożliwiłeś zdarzenie przekierowania tagu z JavaScriptem.

Na przykład

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

.preventDefault() zapobiega przekierowania.

Powiązane problemy