2013-02-24 12 views
9

tôi gặp tình huống thú vị này:<a> liên kết không làm việc bằng cách nhấn, chỉ hoạt động bằng cách "Mở liên kết trong tab mới" lệnh

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

Khi tôi bấm vào một liên kết, không có gì xảy ra, trang Chi tiết sản phẩm không mở. Nhưng tôi làm "Mở liên kết trong tab mới", sau đó mở ra. Điều gì có thể là lý do?

+4

Một số phép thuật JavaScript. – Musa

+3

Bất kỳ JS nào có thể ngăn chặn hành động mặc định của thẻ neo trong mã của bạn? – Mortalus

+0

Bạn có thể kiểm tra HTML được tạo cho chế độ xem Dao cạo đó không? Tôi nghi ngờ nó để tạo ra một url rỗng trong thuộc tính href. – ThomasArdal

Trả lời

25

Bạn có một số mã javascript đang ngăn hành động mặc định của thẻ neo được thực thi. Bạn có thể kiểm tra tab Network trong FireBug hoặc Chrome DevTools để xem liệu một số yêu cầu AJAX có được thực hiện khi bạn nhấp vào liên kết hay không. Bạn có thể thử loại trừ các tệp javascript cho đến khi bạn tìm thấy tệp đang thực hiện việc này.

+8

Trên chrome, DevTools có chế độ xem là "Trình nghe sự kiện" cho phép bạn xác định bất kỳ trình xử lý sự kiện nào như vậy. Một nhược điểm là nó không hiển thị các trình xử lý kế thừa. –

+0

Bài đăng cũ nhưng câu trả lời đã giúp tôi ngày hôm nay!đã có một 'trả về false' trên một trình xử lý nhấn tài liệu ... Cảm ơn! – Wildcard27

+0

Nhìn vào các tiêu đề Phản hồi đã giúp tôi theo dõi lý do tại sao một liên kết đơn giản đến một nhóm Facebook đã bị FB từ chối. Cảm ơn! – cyrf

1

Hãy thử mã này ...

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

đúng do Darren, nó chắc chắn là một số mã javascript đó là gửi một yêu cầu AJAX (đường bưu điện hoặc được) đang ngăn các liên kết từ hoạt động như bạn mong chờ .

Tuy nhiên, nếu bạn đã sử dụng tài nguyên bên ngoài, có thể khó sửa lỗi trong các tệp min.

tôi đề nghị sử dụng một inline jquery sự kiện onclick để phá vỡ các cuộc gọi AJAX

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

Bạn bổ sung có thể sử dụng window.open('https://www.foo.bar/culrsteam', '_blank') như với target='_blank'

1

Điều này có thể xảy ra nếu địa chỉ không có giao thức truyền trong thuộc tính href. Một ví dụ sẽ liên kết localhost là <a href="localhost"></div> thay vì <a href="http://localhost"></div>. Bạn sẽ thấy rằng Google Chrome sẽ cung cấp trạng thái đã hủy nếu thực hiện như vậy và trong Safari, một hộp thoại sẽ xuất hiện yêu cầu mở ứng dụng liên kết nào, vì giao thức truyền không xác định. Tôi gặp sự cố này khi đặt liên kết thành $_SERVER['HTTP_HOST'] bằng PHP.

Điểm quan trọng là, hãy đảm bảo bạn để giao thức chuyển ở phía trước liên kết là http://, https://, ftp:// hoặc bất kỳ thứ gì khác.

2

Có thể bạn đã ngăn sự kiện chuyển hướng của thẻ bằng JavaScript.

Ví dụ:

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

.preventDefault() ngăn chặn chuyển hướng.