Làm thế nào để làm cho một thẻ neo đề cập đến không có gì?


159

Tôi sử dụng jQuery, tôi cần làm cho một số thẻ neo thực hiện không có hành động.

Tôi thường viết nó như thế này:

<a href="#">link</a>

Tuy nhiên, điều này đề cập đến đầu trang!


bởi vì jquery sẽ xử lý sự kiện nhấp chuột nên tôi muốn liên kết giống như một liên kết đau nhưng hoạt động như một hàm JavaScript
ahmed


1
Như đã đề cập trong một trong những câu trả lời dưới đây: nếu bạn không muốn liên kết trỏ đến tài nguyên, đừng sử dụng phần tử A.
Mathias Bynens

Đừng sử dụng hrefthuộc tính tại đó.
vsync

Câu trả lời:


103

Nếu bạn không muốn nó chỉ ra bất cứ điều gì, có lẽ bạn không nên sử dụng <a> (neo).

Nếu bạn muốn một cái gì đó trông giống như một liên kết nhưng không hoạt động như một liên kết, tốt nhất là sử dụng phần tử thích hợp (chẳng hạn như <span>) và sau đó tạo kiểu cho nó bằng CSS:

<span class="fake-link" id="fake-link-1">Am I a link?</span>

.fake-link {
    color: blue;
    text-decoration: underline;
    cursor: pointer;
}

Ngoài ra, do bạn đã gắn thẻ câu hỏi này "jQuery", tôi giả sử rằng bạn muốn đính kèm một trình xử lý sự kiện nhấp chuột. Nếu vậy, chỉ cần làm tương tự như trên và sau đó sử dụng một cái gì đó như JavaScript sau đây:

$('#fake-link-1').click(function() {
    /* put your code here */
});

37
Điều này có một vấn đề: nó không cho phép điều hướng tab.

6
Lưu ý rằng (như Iraimbilanja chỉ ra) cách tiếp cận nhịp ở đây sẽ vô hiệu hóa khả năng gọi hàm bằng bàn phím, mà tôi sẽ xem xét vấn đề về khả năng sử dụng.
Fredrik Mörk

3
Cũng là một vấn đề tiếp cận. Bạn có thể giải quyết nó bằng cách sử dụng một phần tử nút (được tạo từ JavaScript để người dùng không phải là JS không bị kiểm soát).
Quentin

4
Đây là cách khắc phục nhanh cho điều đó: tabindex = "0" trên phần tử không liên kết sẽ cho phép điều hướng bàn phím trong hầu hết các trình duyệt hiện đại.
Mathias Bynens

1
Một 'vấn đề' khác là bạn không sử dụng lớp CSS: hover giả sẽ không hoạt động trên các phần tử không liên kết trong IE6. Nhưng vì dù sao bạn cũng đang thêm các phần tử này thông qua JavaScript (ít nhất là bạn nên), bạn cũng có thể viết một tập lệnh thêm lớp .hover vào phần tử khi được di chuột.
Mathias Bynens

268

Có một vài giải pháp ít hơn hoàn hảo:

1. Liên kết đến một neo giả

<a href="#">

Vấn đề: nhấp vào liên kết nhảy trở lại đầu trang

2. Sử dụng thẻ không phải là 'a'

Sử dụng thẻ span và sử dụng jquery để xử lý nhấp chuột

Vấn đề: phá vỡ điều hướng bàn phím, phải thay đổi con trỏ di chuột bằng tay

3. Liên kết đến một hàm void javascript

<a href="javascript:void(0);">
<a href="javascript:;">

Vấn đề: vỡ khi liên kết hình ảnh trong IE

Giải pháp

Vì tất cả đều có vấn đề của họ, giải pháp tôi đã giải quyết là liên kết với một neo giả, và sau đó trả về false từ phương thức onClick:

<a href="#" onClick="return false;">

Không phải là giải pháp ngắn gọn nhất, nhưng nó giải quyết tất cả các vấn đề với các phương pháp trên.


2
Tôi thường sử dụng javascript: void (0); Cách tiếp cận, bởi vì sử dụng # sẽ hiển thị URL hiện tại trong thanh của Firefox, điều này có thể gây hiểu lầm cho người dùng.
lucaferrario

8
breaks when linking images in IEĐiều đó có nghĩa là gì?
eugene

14
@eugene câu hỏi này đã được 3 năm tuổi, nhưng IE đã sử dụng để làm cho hình ảnh biến mất khi được bao quanh bởi một liên kết đến một hàm void. Không chắc chắn khi nó được sửa, nhưng nó hoạt động trong IE10, đó là tất cả những gì tôi đã cài đặt. Cá nhân tôi hiện đang sử dụng<a href="javascript:;">
zaius

1
Tôi cũng đã sử dụng các nhận xét trong đó: <a href="javascript:void(0); // Hiển thị bảng thuộc tính palette">. Bằng cách đó, khi người dùng di chuyển, họ thấy bình luận có thể cung cấp cho họ một gợi ý những gì mong đợi khi họ nhấp vào. (Mặc dù bạn cũng có thể sử dụng một chú giải công cụ.)
Robin Zimmermann

5
Có vẻ như điều đó href="javascript:"cũng đủ và hoạt động trong các trình duyệt chính mới nhất. Không cần dấu chấm phẩy, trên thực tế PhpStorm thậm chí còn đề nghị loại bỏ nó.
jlh

40

Để làm cho nó không làm gì cả, sử dụng này:

<a href="javascript:void(0)"> ... </a>

1
hoặc chỉ <a href="javascript:;">. PS không hoạt động với target=_blankmặc dù
Alex

36

Cách chính xác để xử lý việc này là "ngắt" liên kết với jQuery khi bạn xử lý liên kết

HTML

<a href="#" id="theLink">My Link</a>

Mã não

$('#theLink').click(function(ev){
    // do whatever you want here

    ev.preventDefault();
    ev.stopPropagation();
});

Hai cuộc gọi cuối cùng dừng trình duyệt diễn giải nhấp chuột.


5
Mặc dù điều đó nghe có vẻ như "đúng" bởi vì nó ngăn chặn sự kiện sủi bọt, "return false" lại ít dài dòng hơn và làm điều tương tự. Lần duy nhất bạn muốn làm điều đó là nếu bạn đã có trình xử lý sự kiện được đăng ký để nhấp vào liên kết qua jQuery.
aleemb

25

Có rất nhiều cách để làm điều đó như

Không thêm và hrefthuộc tính

<a name="here"> Test <a>

Bạn có thể thêm sự kiện onclick thay vì href như

<a name="here" onclick="YourFunction()"> Test <a>

Hoặc bạn có thể thêm chức năng void như thế này sẽ là cách tốt nhất

<a href="javascript:void(0);"> 
<a href="javascript:;">

Là thuộc tính tên được yêu cầu?
Petrus Theron

@PetrusTheron Không cần thiết. .
Punit Gajjar

Đây là sự
lột xác của

1
Đừng quên đặt kiểu thẻ neo của bạn nếu bạn xóa hrefthuộc tính vì nó sẽ không còn hoạt động như một siêu liên kết (mặc dù onclick vẫn hoạt động), bạn sẽ phải đặt lại nội dung như cursor: pointer;:hoverbộ chọn.
Partack

@Partack Đúng .. Cảm ơn bạn đã chú ý
Punit Gajjar

24

Bạn có ý nghĩa gì bởi không có gì?

<a href='about:blank'>blank page</a>

hoặc là

<a href='whatever' onclick='return false;'>won't navigate</a>

1
Đồng ý - chỉ cần trả về false từ phương thức jQuery và voila của bạn, nó sẽ không đi đến đâu
joshcomley

14

Tôi nghĩ bạn có thể thử

<a href="JavaScript:void(0)">link</a>

Điều hấp dẫn duy nhất tôi thấy ở đây là bảo mật trình duyệt cấp cao có thể nhắc thực thi javascript.

Mặc dù đây là một trong những cách dễ dàng hơn

<a href="#" onclick="return false;">Link</a>

cái này nên dùng

Đọc bài viết này cho một số gợi ý https://web.archive.org/web/20090301044015/http://blog.reindel.com/2006/08/11/a-hrefjavascriptvoid0-avoid-the-void


Câu trả lời đúng, cho phép điều hướng tab.
K - Độc tính trong SO đang tăng lên.

14

Câu trả lời này cần được cập nhật để phản ánh các tiêu chuẩn web mới (HTML5).

Điều này:

<a tabindex="0">This represents a placeholder hyperlink</a>

... là HTML5 hợp lệ. Thuộc tính tabindex làm cho bàn phím có thể tập trung như các siêu liên kết thông thường. Bạn cũng có thể sử dụng spanyếu tố này như đã đề cập trước đây, nhưng tôi thấy việc sử dụng ayếu tố này thanh lịch hơn.

Xem: https://w3c.github.io/html-reference/a.html
và: https://html.spec.whatwg.org/multipage/links.html#attr-hyperlink-href


1
Đây cũng là HTML4 hợp lệ, nhưng nó sẽ không tạo kiểu neo như một liên kết.
interjay

1
Tôi không biết đó là html4 hợp lệ, nhưng thông số HTML5 đề cập rõ ràng đến trường hợp sử dụng. Và các kiểu không nhắm mục tiêu thuộc tính href sẽ hoạt động tốt, chỉ các kiểu trình duyệt mặc định có thể là một vấn đề.
vào

1
Điều này cũng không kích hoạt clicksự kiện khi người dùng tập trung vào phần tử và nhấn enter (được thử nghiệm trong Firefox 51).
torvin

@torvin, đơn giản thôi. Sử dụng keydownsự kiện.
vào



5

Tôi biết đây là một câu hỏi cũ, nhưng tôi nghĩ dù sao tôi cũng đã thêm hai xu của mình:

Nó phụ thuộc vào những gì liên kết sẽ làm, nhưng thông thường, tôi sẽ chỉ liên kết vào một url có thể hiển thị / làm điều tương tự, ví dụ, nếu bạn đang làm một chút về hộp bật lên:

<a id="about" href="/about">About</a>

Sau đó, với jQuery

$('#about').click(function(e) {
    $('#aboutbox').show();
    e.preventDefault();
});

Bằng cách này, các trình duyệt rất cũ (hoặc trình duyệt bị tắt JavaScript) vẫn có thể điều hướng đến một trang riêng biệt, nhưng quan trọng hơn, Google cũng sẽ chọn mục này và thu thập nội dung của trang về.


5

Đảm bảo tất cả các liên kết mà bạn muốn dừng có href="#!"(hoặc bất cứ thứ gì bạn muốn, thực sự), và sau đó sử dụng:

jq('body').on('click.stop_link', 'a[href="#!"]',
function(event) {
     event.preventDefault();
});

4

Bạn có thể có một neo HTML ( athẻ) mà không có hrefthuộc tính. Để lại hrefthuộc tính & nó sẽ không liên kết đến bất cứ điều gì:

<a>link</a>

Cảm ơn bạn! Nó hoàn toàn làm việc cho trường hợp của tôi. Nơi tôi muốn có thẻ Anchor để mở trong tab mới khi có URL, nhưng không có gì nếu không có URL. Trong trường hợp # nó đã chấp nhận NHẤP VÀ di chuyển nó lên đầu trang. Có phần không như bạn đề nghị. Nó giải quyết vấn đề! Định dạng trông tuyệt vời do một thẻ, vấn đề nhấp chuột đi với no href. Cảm ơn bạn!!!
Mohsin

1
Nếu bất cứ ai khác đang nghĩ nếu nó là HTML5 hợp lệ, thì câu trả lời là CÓ :) stackoverflow.com/a/33046203/5323892 . Dưới đây là ví dụ từ trang tiêu chuẩn (xem mục li thứ 3): <nav> <ul> <li> <a href="https://stackoverflow.com/"> Trang chủ </a> </ li> <li> <a href = "/ tin tức "> Tin tức </a> </ li> <li> <a> Ví dụ </a> </ li> <li> <a href="https://stackoverflow.com/legal"> Pháp lý </a> </ li> </ li ul> </ nav>
Mohsin

Nó hoạt động nhưng nếu bạn muốn con trỏ chuột thay đổi thành ngón tay, chỉ cần thêm href = "JavaScript: void (0)" như được đề xuất trong câu trả lời của @Rutesh Makhi camera.
Tarik

3

Điều duy nhất làm việc cho tôi là sự kết hợp của những điều trên:

Đầu tiên là li trong ul

<li><a onclick="LoadTab2_1()" href="JavaScript:void(0)">All Assigned</a></li>

Sau đó, trong LoadTab2_1, tôi đã tự chuyển các tab div

$("#tabs-2-1").hide();
    $("#tabs-2-2").show();

Điều này là do việc ngắt kết nối cũng ngắt kết nối hành động trong các tab

Bạn cũng cần thực hiện thủ công kiểu dáng tab khi tab chính thay đổi mọi thứ

$("#secTab1").addClass("ui-tabs-active").addClass("ui-state-active").addClass("ui-state-hover").addClass("ui-state-focus");
    $("#secTab1 a").css("color", "#ffffff");


1
<a href="#" onclick="SomeFunction()"  class="SomeClass">sth.</a>

đây là thẻ neo của tôi. vì vậy, trả về false trên sự kiện onClick = "" không hữu ích ở đây. Tôi vừa xóa thuộc tính href = "#" và nó hoạt động với tôi như dưới đây

<a onclick="SomeFunction()"  class="SomeClass">sth.</a>

và tôi cần thêm css này.

.SomeClass
{
    cursor: pointer;
}

Bạn có ý nghĩa gì với điều đó. Những gì được đề nghị và tại sao?
Burk

Cách tốt nhất để giữ javascript và html trong các tệp riêng biệt, đây là câu trả lời chi tiết: stackoverflow.com/questions/5871640/ Kẻ
Alexandru Severin

1

Tôi gặp phải vấn đề này trên một trang web WordPress. Các tiêu đề trên menu thả xuống luôn có thuộc tính href=""và plugin tiêu đề chỉ được sử dụng cho phép các url tiêu chuẩn. Giải pháp đơn giản nhất là chạy mã này ở chân trang:

jQuery('[href=""]').click(function(e){
    e.preventDefault();
});

Điều này sẽ ngăn chặn neo trống làm bất cứ điều gì.


0

React không còn hỗ trợ sử dụng một chức năng như thế này href="javascript:void(0)"trong thẻ neo của bạn, nhưng đây là một cái gì đó hoạt động khá tốt.

<a href="#" onClick={() => null} >link</a>

-1

Tôi biết điều này được gắn thẻ dưới dạng câu hỏi jQuery, nhưng bạn cũng có thể trả lời câu hỏi này với AngularJS.

trong phần tử của bạn, thêm chỉ thị ng-click và sử dụng biến $ event là sự kiện nhấp ... ngăn chặn hành vi mặc định của nó:

<a href="#" ng-click="$event.preventDefault()">

Bạn thậm chí có thể chuyển biến $ event vào hàm:

<a href="#" ng-click="doSomething($event)">

trong chức năng đó, bạn làm bất cứ điều gì bạn muốn với sự kiện nhấp chuột.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.