Tạo một liên kết HTML không làm gì cả (nghĩa là không có gì)


87

Tôi muốn một liên kết mà không làm gì cả. Tôi không muốn điều này:

<a href="#">

bởi vì khi đó URL trở thành something.com/whatever/#.

Lý do duy nhất tôi muốn có một liên kết là để người dùng có thể thấy rằng họ có thể nhấp vào văn bản. JavaScript đang được sử dụng để thực hiện một số hành động nên tôi không cần liên kết để đi đâu cả nhưng tôi cần nó giống như một liên kết!

Tôi có thể sử dụng một số thuộc tính dữ liệu và cho tôi biết CSS để làm cho các phần tử trông giống như liên kết nếu chúng có thuộc tính này nhưng nó có vẻ hơi quá mức cần thiết.


Có chuyện gì vậy something.com/whatever/#?
Charles Sprayberry

1
bạn có thể cho nó một href là trống và trả về false trong javascript. Nhưng đó là ngữ nghĩa hơn nếu bạn chỉ cần thay đổi thuộc tính con trỏ đến pointertrong CSS của bạn
JohnP

@CharlesSprayberry: Có những tình huống mà bạn không muốn.
PeeHaa

Đây cũng sẽ là một câu hỏi hay để hỏi trên ux.stackexchange.com .

1
Câu hỏi này được thảo luận sâu hơn tại đây: stackoverflow.com/questions/134845/…
DawnPaladin

Câu trả lời:


124

Điều sau sẽ ngăn chặn chạy href của bạn

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

Nếu bạn đang sử dụng jQuery, event.preventDefault()có thể sử dụng


Khiến các sự kiện onclick bổ sung bị hủy bỏ.
Rauli Rajande

5
Khiến trang cuộn lên đầu trang.
David Hempy

@DavidHempy Tôi không trải nghiệm điều này. Trình duyệt nào?
Curt

1
@curt Google Chrome 63.0.3239.84 Version (Phiên bản Chính thức) (64-bit) (hoặc có thể là một phiên bản hơi-cũ cách đây hai tuần)
David Hempy

Điều này không hoạt động đối với plugin wordpress cuộn đến id và liên kết vẫn sẽ làm điều gì đó. Trong trường hợp này, sẽ có một lỗi sẽ chuyển hướng bạn lên đầu trang.
Jiri Otoupal イ り オ ト ウ パ ー

88

Thử đi:

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

4
+1 nhưng câu hỏi nhanh: có sự khác biệt giữa javascript:voidjavascript:void(0)?
Adam Rackis

3
Nếu bạn cố gắng sử dụng javascript: void (0) mà không có param, bạn sẽ có SyntaxError và tất cả các tập lệnh của bạn sẽ bị lỗi.
alexdets

3
@alexdets javascript:void()sẽ là SyntaxError, nhưng javascript:voidchỉ trả về không xác định - giống như void(0). Adam, theo như tôi có thể nói, voidvoid(0)tương đương về mặt chức năng cho việc sử dụng này. --- chỉnh sửa: mặc dù tôi thấy ý kiến khác đó gợi ý nó có thể tải lại trang ..
andytuba

3
Bạn có viết hoa javaScript / javascript / JavaScript / Javascript không?
Tim Truston

2
@TechyTimo Không viết hoa không quan trọng, trên thực tế nó không nên viết hoa. Tôi đã gửi một bản chỉnh sửa.
Weston Ganger

28

Trong HTML5, điều này rất đơn giản. Chỉ cần bỏ qua hrefthuộc tính.

<a>Do Nothing</a>

Từ MDN trên thuộc tính thẻ href :

href

Đây là thuộc tính bắt buộc duy nhất để xác định liên kết nguồn siêu văn bản, nhưng không còn bắt buộc trong HTML5.


Con trỏ tay khi di chuột thì sao?

Các kiểu mặc định cho trình duyệt không được thay đổi con trỏ thành con trỏ, đối với acác thẻ không có href. Bạn hoàn toàn có thể thay đổi điều này bằng CSS sau.

a {
    cursor: pointer;
}
<a>Do Nothing</a>

Tuy nhiên, có lẽ tốt hơn là bạn nên chọn lọc hơn về nó và chỉ áp dụng nó cho những phần tử bạn định thêm trình xử lý sự kiện vào.


Điều gì về việc làm cho nó có thể lấy tiêu điểm theo tab?

Chỉ cần thêm tabindex="0"vào phần tử.

<a tabindex="0">Do Nothing</a>


Sử dụng athẻ không có liên kết có hợp lý không?

Thông thường là không, có lẽ tốt hơn là sử dụng một buttonphần tử và tạo kiểu bằng CSS. Nhưng bất cứ điều gì bạn sử dụng, hãy tránh sử dụng một phần tử tùy ý divkhi có thể, vì điều này không mang tính ngữ nghĩa gì cả.


1
Với bootstrap 4, các liên kết không có href không được định dạng là liên kết.
user3413723 17/07/19

13

Đừng đặt nó thành một liên kết (mặc dù nó được ưu tiên làm điều đó) và tạo kiểu nó bằng CSS để nó trông giống như một liên kết:

p.not-a-link { text-decoration: underline; cursor: pointer } 

Hoặc thậm chí tốt hơn chỉ cần tạo liên kết và để hàm javascript được sử dụng e.preventDefault()để ngăn liên kết.

Ngoài ra, hãy thêm liên kết vào hrefđể người dùng không bật JS vẫn có thể sử dụng nó (như một dự phòng).


1
+1 Với cuộc tranh luận IE5.5 đã kết thúc, liệu một nhịp có tốt hơn ap không?
amelvin

1
Tôi thích khoảng thời gian hơn. P có thể làm cho một hàng mới, trong khi khoảng doesnt
Ronnie Oosting

9

<a href="javascript:;">Link text</a> - đó là những gì tôi thường sử dụng


5
Điều này sẽ không tải lại trang với một số trình duyệt?
Curt

@Curt: Bạn nói đúng, đọc sai câu hỏi. Bạn đã có một bình luận ủng hộ nó :-)
Scott Brown

... và tôi đã có 2 phiếu phản đối, trong đó có một phiếu sau khi chỉnh sửa! Yêu nghiệt!
Scott Brown,

Hủy bỏ các mã đầu tiên, sau đó tôi sẽ được phép tháo bỏ phiếu xuống của tôi :) It wont cho tôi loại bỏ các downvote, nó "khóa"
Curt

1
Điều này ảnh hưởng đến trình duyệt nào, nó vẫn còn là một vấn đề nữa? Điều này sẽ được ưu tiên hơn void(0), bởi vì nó hiển thị trên thanh trạng thái. Tôi nói điều đó bởi vì tôi đã được người dùng gắn cờ nó là một lỗi / lỗi (rõ ràng là không phải), vì vậy tôi nghĩ rằng việc mắc phải nó thật khó hiểu với họ.
chunk_split

4

Chúng ta có thể đạt được điều đó bằng cách sử dụng void javascript, thường liên quan đến việc đánh giá một biểu thức và trả về không xác định, bao gồm thêm javascript:void(0);vào href.

Toán tử void thường được sử dụng đơn thuần để lấy một giá trị nguyên thủy không xác định, thường sử dụng “void (0)” (tương đương với “void 0”). Trong những trường hợp này, biến toàn cục không xác định có thể được sử dụng thay thế (giả sử nó chưa được gán cho giá trị không mặc định).

a {
  text-decoration: initial;
}
<a href="javascript:void(0);"> This link actually does nothing when clicked</a>


2

Câu trả lời của @ Curt sẽ hoạt động, nhưng bạn có thể sử dụng kiểu con trỏ trong css để làm cho nó giống như một liên kết mà không cần phải bận tâm đến việc tạo ra một liên kết không có thật. Sử dụng tay hoặc con trỏ tùy thuộc vào trình duyệt.

Css con trỏ tuân thủ trình duyệt chéo (từ hướng dẫn kiểu con trỏ ):

element {
    cursor: pointer;
    cursor: hand;
}

@PeeHaa Chỉ sử dụng con trỏ nếu bạn không muốn nó hoạt động trong IE5.5 trở về trước!
amelvin

3
Đó là những gì tôi nói! Vui lòng không đề cập đến IE5.5: P Một lưu ý nghiêm trọng hơn là chia sẻ IE5.5 0.17%. Nếu mọi người vẫn còn trên phiên bản mà họ không xứng đáng để duyệt web
PeeHaa

2

một cách mà chưa ai đề cập là trỏ href đến một vị trí tệp cục bộ trống như vậy

<a href='\\'>my dead link</a>

tại sao? Nếu bạn sử dụng một khuôn khổ như phản ứng hoặc góc cạnh, trình biên dịch sẽ đưa ra một số cảnh báo có thể làm bẩn nhật ký hoặc bảng điều khiển của bạn. Kỹ thuật này cũng sẽ ngăn không cho robot hoặc nhện liên kết không chính xác mọi thứ.


-1

KHÔNG SỬ DỤNG <a>... thay vào đó sử dụng <span class='style-like-link'> và sau đó sử dụng lớp để tạo kiểu cho nó theo cách bạn muốn.


Không có gì sai khi sử dụng thẻ liên kết mà không có liên kết, chưa kể đến việc có nhiều trường hợp làm như vậy sẽ ý nghĩa hơn rất nhiều , thay vì thay thế nó bằng một thẻ liên kết giả. Chưa kể đến phong cách một yếu tố để trông giống như một nhưng được thực hiện khác nhau là ràng buộc để các vấn đề maintanence nguyên nhân trong tương lai
Tim

Đã đồng ý. Nó hoàn toàn phụ thuộc vào trường hợp sử dụng và những gì bạn đang cố gắng hoàn thành. Tôi chỉ cung cấp đây như một câu trả lời để giúp những người khác biết rằng đây là một lựa chọn AN.
Bryce

Nếu đúng như vậy, tôi khuyên bạn nên chỉnh sửa nó để sử dụng ngôn ngữ cho thấy đó là một giải pháp thay thế khả thi, thay vì nói bằng chữ hoa không sử dụng thẻ neo chuẩn cho việc này, khi nó hoàn toàn hợp lệ để làm như vậy
Tim
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.