2012-04-20 43 views
8

Có sự khác biệt giữaonclick = "javascript: func()" vs onclick = "func()"

<input type="submit" value="Register" onclick="javascript:submitTheForm();"> 

<input type="submit" value="Register" onclick="submitTheForm();"> 

Tôi có nên sử dụng javascript: trước khi gọi hàm JS ?

+4

Không cần bạn .. –

+0

trên ***** chạy javascript mà không định nghĩa chúng là "javascript:" – Tobi

+0

một trong hai cách, thực tiễn không tốt để sử dụng nội tuyến – Joseph

Trả lời

10

javascript: bên trong trình xử lý onwhatever="" là chế độ không hoạt động. Nội dung của thuộc tính này luôn là JavaScript để javascript: xác định label - nhưng bên ngoài khối switch (nơi bạn có thể sử dụng nó để break/continue đến vị trí của nhãn) không có gì.

Tuy nhiên, việc sử dụng trình xử lý sự kiện nội tuyến không được khuyến khích, có betterways để đăng ký trình xử lý sự kiện.


Trong khi không được đề cập trong câu hỏi, đó là đáng chú ý rằng việc sử dụng javascript: trong thuộc tính href làm việc (và trong đó nó thực sự cần thiết) nhưng được đánh giá cao nản vì nhiều lý do:

  • this không trỏ đến phần tử
  • Gọi hàm trả về giá trị khiến trình duyệt rời khỏi trang web
  • Nhấp vào liên kết có ngắt JavaScript bị vô hiệu
  • Đang cố gắng để mở liên kết trong một cửa sổ mới/tab phá vỡ

Vì vậy, nếu bạn thực sự phải sử dụng các sự kiện nội tuyến, luôn luôn sử dụng onclick="" vv mà không javascript:.

+0

Bạn có thể sử dụng nó cũng với 'break' và bất kỳ tuyên bố. Nó không phải được sử dụng cùng với 'switch'. –

+0

Đúng; đã cập nhật câu trả lời của tôi. – ThiefMaster

1

Khi bạn ở trong thuộc tính onclick, bạn không nên sử dụng tiền tố javascript:. Đây là hữu ích khi bạn muốn có một liên kết <a /> để xử lý một chức năng JS, ví dụ:

<a href="javascript:myfunc();"></a> 
+2

'javascript:' URL là xấu. Chúng không chỉ phá vỡ JavaScript bị vô hiệu hóa mà còn gây ra các vấn đề nếu hàm trả về một giá trị. Vì vậy, tốt hơn hãy sử dụng URL thích hợp trong 'href' (hoặc' # 'nếu liên kết không có dự phòng không phải là js) và' onclick' để chạy mã javascript của bạn ('return false;'/'preventDefault' để tránh tải href của liên kết) – ThiefMaster

+1

Tôi đồng ý với bạn. Câu hỏi là về tiền tố 'javascript:'. – sp00m

1

javascript:func() đang sử dụng javascript protocol để nó có thể được sử dụng trong một neo href thuộc tính. Tuy nhiên, đừng làm điều này, hãy xem Why is it bad practice to use links with the javascript: “protocol”? để biết thêm thông tin.

Trình xử lý sự kiện thích hợp hơn để kích hoạt sự kiện thay vì thuộc tính.

+0

OP hỏi về 'onclick', không phải về' href' – ThiefMaster

+0

Dù sao thì hãy cảm ơn về câu hỏi liên quan! –

+0

@ThiefMaster - đúng nhưng anh ấy cũng hỏi về kịch bản bắt đầu với 'javascript: '. – detaylor