2010-08-19 39 views
5

Tôi có thể sử dụng thông tin sau trên tất cả các trình duyệt không?Javascript OnClick thân thiện với trình duyệt?

<a href="#" onclick="doSomething()">Click here.</a> 

Đây có phải là "thực hành không tốt" trong tiêu chuẩn không?

Nó có hoạt động trên IE, FF, Safari và Chrome không?

Trả lời

9

Tôi có thể sử dụng thông tin sau trên tất cả các trình duyệt không?

Đây có phải là "thực hành xấu" liên quan đến tiêu chuẩn?

"Thực hành không hợp lệ" và "Tuân thủ tiêu chuẩn" là những thứ khác nhau. Đó là tiêu chuẩn tuân thủ, nhưng cũng vì ba lý do, thực hành không tốt.

  1. Nó không phải là unobtrusive. Xử lý sự kiện được áp dụng tốt hơn với JS.
  2. Liên kết tới đầu trang (#) và sẽ luôn gửi trình duyệt đến đó, ngay cả khi JS chạy.
  3. Nếu JS thất bại, thì không có gì hữu ích sẽ xảy ra. Bạn nên build on stuff that works.

Nó có hoạt động trên IE, FF, Safari và Chrome không?

+2

Thực tế là sử dụng một thuộc tính xử lý sự kiện không phải là "không phô trương" không liên quan gì tới các tiêu chuẩn. Trong thực tế, các thuộc tính xử lý sự kiện như 'onclick' ** được chuẩn hóa trong đặc tả HTML 4. –

+2

"thực hành không tốt" và "tiêu chuẩn" là những thứ khác nhau. Tôi sẽ làm rõ câu trả lời. – Quentin

+0

@czupe - Phương thức 'click()' hoàn toàn không liên quan gì đến câu hỏi hoặc câu trả lời này (tức là về * gán * người xử lý sự kiện, không * kích hoạt * chúng theo chương trình). – Quentin

0

Nó sẽ hoạt động trong các trình duyệt bạn đã đề cập.

Cố gắng để có được vào các thói quen đặt một ; vào cuối mỗi javascript 'dòng':

<a href="#" onclick="doSomething();">Click here.</a> 

Mặc dù nó sẽ chạy tốt mà không có nó, nếu bạn thực hiện thói quen tốt thì bạn có thể tiết kiệm bạn gặp rắc rối sau này khi bạn viết kịch bản lớn hơn.

Nếu bạn không muốn # được hiển thị trong thanh địa chỉ:

<a href="#" onclick="doSomething(); return false;">Click here.</a> 
+0

Tôi biết JS, tôi chỉ là một chút gỉ. Cảm ơn con trỏ mặc dù. – Moshe

0

Từ onClick này Wikipedia page được liệt kê trong phần/sự kiện W3C chung và được hỗ trợ bởi các trình duyệt bạn đề cập đến.

Ngoài ra, nếu không thì hầu hết các ứng dụng web sẽ không hoạt động trên các trình duyệt này.

2

onclick là trình duyệt chéo. Các cuộc thảo luận về các tiêu chuẩn và thực hành tốt nhất là lớn hơn nhiều, tất nhiên. Hầu hết sẽ nói rằng 'tăng cường tiến bộ' được ưa thích. Lời giải thích đơn giản về điều này là liên kết vẫn sẽ làm điều đúng, phiên bản javascript sẽ chỉ cải thiện hành vi. Có hay không điều này quan trọng đối với bạn thực sự phụ thuộc vào những gì bạn đang làm, dự án là gì, v.v.

0

Nó sẽ hoạt động trên tất cả các trình duyệt, nhưng thực hành tốt nhất hầu hết được đính kèm với trình xử lý nhấp như jQuery $('a').click(doSomething); JavaScript độc lập hơn với HTML. Cũng theo cách đó, có thể đính kèm nhiều trình xử lý và với trình xử lý phương thức của live của jQuery có thể được thêm vào các phần tử HTML được thêm động vào trang.

6

Mặc dù một số người có thể nói, đó không phải là thực hành không tốt (với báo trước rằng đó là trình xử lý sự kiện duy nhất bạn muốn trên phần tử này) và đó là cách trình duyệt đơn giản nhất (và phổ biến nhất) để thêm người nghe sự kiện , nhưng có hai thay đổi tôi sẽ thực hiện cho nó.

Trước hết, nếu Javascript không được bật, liên kết sẽ vô ích (mặc dù # href sẽ làm cho trình duyệt cuộn lên đầu trang, có thể không được mong muốn). Tương tự, khi bật Javascript, việc nhấp vào liên kết sẽ vẫn khiến trình duyệt theo dõi href và cuộn lên.

Thay vào đó, tôi muốn sử dụng một cái gì đó như thế này:

<a href="[url to JS-less way of doing the same thing]" onclick="doSomething(); return false">Click here</a> 

Cách khác, nếu nó thực sự là một điều javascript chỉ, bạn có thể làm cho các liên kết ẩn theo mặc định sử dụng CSS và sử dụng javascript để làm cho nó có thể nhìn thấy (để người dùng bị tắt JS sẽ không thấy liên kết vô dụng).

+0

Vâng, đây hoàn toàn là cách để đi. Để thêm vào câu hỏi của trình duyệt chéo, onclick đã có sẵn trên các phần tử '' với href (nhưng không phải chỉ có tên) từ thời điểm NS2 là trình duyệt đầu tiên có Javascript. –

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