2010-09-17 32 views
12

Từ kinh nghiệm của tôi, tôi biết ba cách khác nhau để thực hiện một chức năng Javascript khi người dùng nhấp vào một liên kếtCách tốt nhất để thực hiện chức năng khi người dùng nhấp vào liên kết là gì?

  1. Sử dụng onclick thuộc tính vào liên kết

    <a href="#" onclick="myfunction();return false;">click me</a> 
    
  2. Sử dụng href vào liên kết

    <a href="javascript:myfunction();">click me</a> 
    
  3. Không chạm vào liên kết, thực hiện mọi thứ trong js

    <a href="#">click me</a> 
    

    (trong Javascript chúng tôi sẽ ngăn chặn các sự kiện mặc định, và gọi hàm)

Cái nào tốt hơn? Ưu điểm và nhược điểm là gì?

EDIT xóa "javascript:" trên onclick

+0

không nói "javascript:" trong onclick. Điều đó giới thiệu một nhãn (cho 'ngắt',' tiếp tục') mà bạn không cần. – Thilo

+3

Nói chung không nên để không chạm vào HTML * *, như bạn đặt nó trong ví dụ 3, vì nó sẽ rắc rối khi bạn cố gắng đính kèm trình xử lý sự kiện trong Javascript nếu không có cách nào để chọn phần tử chính xác. –

+0

Ngay cả khi bạn thực hiện phương pháp tiếp cận 3, hãy sử dụng 'href' để thực hiện điều gì đó cho người dùng không sử dụng javascript. Nếu đó là hành động không có ý nghĩa đối với người dùng không phải javascript thì bạn có thể sử dụng javascript để * tạo * liên kết - theo cách đó, những người duy nhất sẽ thấy đó là những người có thể sử dụng nó – Gareth

Trả lời

8

Unobtrusive Javascript (ví dụ thứ ba của bạn) với graceful degredation là sự lựa chọn tốt nhất.

+0

Nó giống như với các kiểu css - không style = "" bên trong html, sử dụng bộ chọn theo kiểu chung của trang và thuê ngoài css. – sod

+0

nhưng thứ ba đôi khi có nghĩa là bạn phải cung cấp một id trong liên kết, vì vậy bạn có thể kết thúc với một số id trên Html của bạn. Và mã JS của bạn trở nên xấu xí khi bạn có nhiều liên kết khác nhau với các chức năng khác nhau – pleasedontbelong

+0

Không nhất thiết, hài lòng. Bạn có thể duyệt qua chỉ mục của phần tử trong DOM. Hoặc bạn có thể sử dụng sự kiện ủy nhiệm và xử lý nhấp chuột dựa trên tên lớp, giá trị href, v.v. – Kevin

0

Hoặc cách khác, sử dụng jQuery

$(function() { 
    $('[id$=myLinkID]').click(function(e) { 
     myFunction(); 
    }); 
}); 
+0

đó là tùy chọn thứ 3 = P, hoặc bằng cách sử dụng JQuery, mootools, prototype hoặc js – pleasedontbelong

3

Nó luôn luôn là tốt để có một liên kết trong thuộc tính href để hỗ trợ người dùng có Javascript vô hiệu hóa trên trình duyệt của họ.

<a href="http://www.mywebsite.com/javascriptdisabled.html" onclick="myfunction(); return false;">click me</a> 
+0

+1 lợi thế ... nhưng nó có nhược điểm, bạn cần phải dừng sự kiện bằng cách sử dụng "return false", nó không phải là một việc lớn nhưng nó một "tóc trong súp" – pleasedontbelong

+0

'trả về false' dừng liên kết từ bắn và trang 'nhảy', bạn không thể tránh nó nếu bạn đang viết nội tuyến JS (theo như tôi biết) - Có lý do cụ thể nào không được sử dụng bên cạnh thực tế rằng nó là xấu xí –

+0

nop, không có lý do khác bên cạnh đó. nhưng bạn nên nhớ rằng nếu bạn gọi hàm từ bên trong href, bạn sẽ không cần trả về false, nhưng bạn sẽ gặp vấn đề với các trình duyệt không hỗ trợ JS, và một ngày, tất cả các trình duyệt sẽ hỗ trợ JS , bây giờ trong chrome nó thậm chí không thể làm vô hiệu hóa mã js .. vì vậy tôi đoán là trong tương lai chúng ta có thể sử dụng tùy chọn thứ hai trông sạch hơn (ít nhất là với tôi) – pleasedontbelong

1

Không có mục nào ở trên. Sử dụng các click sự kiện (giao hoặc như là một thuộc tính hoặc thông qua kịch bản nếu bạn thích) và có một URL thực như một dự phòng:

<a href="realpage.html" onclick="myfunction(); return false;">click me</a> 

hoặc HTML:

<a href="realpage.html" id="myLink">click me</a> 

Script:

document.getElementById("myLink").onclick = function() { 
    myfunction(); 
    return false; 
}; 

Ngoài ra, không mã tiền tố trong thuộc tính trình xử lý sự kiện với javascript:. Không chính xác và chỉ không xảy ra lỗi do trùng hợp ngẫu nhiên (tức là trong JavaScript, javascript: tạo nhãn có tên là javascript).

+0

cảm ơn, tôi đã sửa chữa các câu hỏi và xóa "javascript:" nhưng bên cạnh đó, tôi không thấy bất kỳ sự khác biệt, những gì bạn đề xuất về cơ bản là lựa chọn 1 và 3. Nhưng như @Yi Jiang đã bình luận, bạn có thể gặp vấn đề nếu không có id "mylink" trong trang (ví dụ liên kết được tạo ra theo thực tế) .. cuối cùng, tất cả phụ thuộc vào những gì bạn cần làm – pleasedontbelong

+0

Có một sự khác biệt rất lớn: tôi thực sự làm điều gì đó khi bạn nhấp vào liên kết với JavaScript bị tắt. –

+0

ahhh bạn nói về "realpage.html": P vâng vâng nó làm điều gì đó khi không có JS. Nhưng đó không phải là câu hỏi của tôi. Tôi muốn khám phá những ưu điểm và nhược điểm khi chọn một trong số chúng – pleasedontbelong

Các vấn đề liên quan