2012-04-09 22 views
11

Nói cách khác, sự khác biệt giữaGiao thức giả JavaScript thực sự làm gì?

onclick="myFunction()" 

onclick="JavaScript:myFunction()" 
+2

Đó là một thời gian dài kể từ lần cuối cùng tôi sử dụng thuộc tính 'onclick'. JavaScript không phô trương cho phép bạn liên kết các sự kiện trên các phần tử trong javascript thay thế và có thể composable hơn. – Spoike

+1

... và JavaScript (TM) vốn hóa điên rồ bắt đầu –

Trả lời

9

Các JavaScript: TYPE/LABEL/PREFIX (không thể tìm thấy tên thực tế cho nó) trong xử lý sự kiện phục vụ bữa một mục đích chỉ:

Trong IE, IFF kịch bản đầu tiên trên trang là KHÔNG JavaScript, JavaScript nội tuyến trên phần còn lại của trang đã có (vẫn còn?) Để có javascript: đặt trước nó.

Không được nhầm lẫn với giao thức javascript: trong href (cũng nên tránh). href="javascript:..." chỉ cần thiết trong các khung hình cũ trong thẻ AREA. Khi bạn thấy số href="javascript:void(0)", một người nào đó cần sử dụng onclick="....; return false" thay vì trừ khi họ đặt nó ở đó để cảnh báo cho người dùng rằng liên kết là một liên kết được định hướng javascript. Nó sẽ thất bại nếu JS bị tắt.

Tôi đã tìm kiếm các tài liệu chính thức từ MSDN, nhưng đây là cuộc thảo luận để ủng hộ tôi:

Calling VBScript from Javascript

Internet Explorer mặc định là ngôn ngữ của các yếu tố kịch bản đầu tiên nó phân tích. Vì vậy, nếu phần tử tập lệnh đầu tiên là javascript, bạn không nên cần chỉ định "javascript:" trong trình xử lý sự kiện của mình.

http://www.webdeveloper.com/forum/archive/index.php/t-135462.html

Bạn phải nói với IE bạn đang sử dụng VBS VÀ JScript, nếu không giả định là tất cả các chức năng VBS trong trường hợp này. Hoặc thêm phần tử JavaScript (trống?) [Ở đầu trang của bạn] hoặc sử dụng giao thức jscript: trên thay đổi . onchange = "jscript: location.hash = this [this.selectedIndex].giá trị;"

Ví dụ

<html> 
<head> 
<script language="VBScript"> 
' some vbscript here forces the default language 
' of the page to be VBScript and not jScript/JavaScript 
</script> 
</head> 
<body onload="javascript:alert('I am inline in an event handler - boo me')"> 
. 
. 
<a href="..." onclick="javascript:alert('and so am I'); return false">Click</a> 
. 
<a href="javascript:alert('javascript: PROTOCOL is NOT the same (but avoid it too)')"> 
    Click 
</a> 


</body> 
</html> 
+0

Ồ, tôi không nhận thức được sự kỳ quặc này trong IE! Vui mừng không bao giờ gặp phải nó. – ephemient

2

Như @ephemient đề cập trong bình luận của ông, javascript trong onclick là những gì không có gì, nó là cơ bản một nhãn vô dụng. Tiền tố javascript được sử dụng trong thẻ <a> để yêu cầu trình duyệt chạy như sau dưới dạng javascript, giống như khi bạn đã nhập cùng một thứ vào trình duyệt của mình. Bạn có thể thử nó trong thanh vị trí của trình duyệt của riêng bạn và xem, chỉ cần nhập javascript: alert("Hello").

Để tóm tắt:

Trong onclick: trình duyệt hy vọng điều này là javascript, vì vậy nếu bạn nhập javascript: như một tiền tố trình duyệt sẽ nói: 'Ồ cách kỳ lạ, bạn đặt một nhãn'.

Trong <a href hoặc trong thanh vị trí của trình duyệt: trình duyệt không mong đợi điều này là javascript, vì vậy nếu bạn nhập javascript: làm tiền tố trình duyệt sẽ nói: 'Ồ, tôi cần chạy nó dưới dạng javascript'.

+0

Nó là "giống như bạn đã nhập cùng một thứ trong trình duyệt của bạn" Tôi không đồng ý. Javascript PREFIX/LABEL biến kỳ diệu thành một PROTOCOL nếu bạn dán nó vào trình duyệt, nhưng đó hoàn toàn là một tác dụng phụ và không có gì để làm với onclick – mplungjan

+0

Thats là chính xác những gì tôi đang nói, tôi cập nhật câu trả lời để cố gắng làm cho nó rõ ràng hơn bởi vì rõ ràng là tôi đã không làm tốt công việc đó. –

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