2010-02-05 31 views
24

Tôi đang chơi xung quanh với JavaScript trong FireFox, và nhấn một vấn đề mà được minh họa trong ví dụ sau:là gì 'nhấp chuột()' trong JavaScript

<HEAD> 
<script type="text/javascript"> 
function click() 
{ 
    alert("click"); 
} 

</script> 
</HEAD> 

<BODY> 

<input type="radio" onclick="click()"> 
</BODY> 

Khi tôi bấm vào nút radio, không có gì xảy ra và không có lỗi (trong Firebug)

Nếu tôi thay đổi tên của hàm thành do_click và thay đổi onclick, thì tôi sẽ nhận được cảnh báo.

Câu hỏi đặt ra là: điều gì đang xảy ra? nhấp chuột dường như không phải là từ dành riêng hoặc biểu tượng hiện có

Trả lời

35

Mã trong xử lý sự kiện inline được scoped để nguyên tố này, như thể nó đang ở trong một with khối.

Do đó, trong trình xử lý onclick, tên click giải quyết theo phương thức click của phần tử.

Điều này có thể demonstrated bằng cách viết alert(nodeName) trong xử lý

+0

Holy s *, I * không bao giờ * biết điều này. Thậm chí cư xử giống nhau trong IE. Điều này có vẻ rất nguy hiểm bây giờ .... –

+1

Tôi cũng vậy, cho đến khi tôi đọc câu hỏi. – SLaks

+4

Có quá nhiều thuộc tính treo trên một nút DOM. Nếu một trình xử lý nhấp chuột chỉ đơn giản là cố gắng đặt một biến toàn cầu đã xảy ra để được đặt tên giống như một trong các thuộc tính nút (ví dụ 'innerHTML'), well .... * crap *. –

0

Tôi nghĩ rằng click() là tên thủ tục dành riêng, vì vậy bạn không thể ghi đè lên nó. Giải thích lý do tại sao thay đổi tên và không có gì khác làm cho nó hoạt động.

+0

"không thể ghi đè" không chính xác. chỉ là mục tiêu là khác nhau. – bryantsai

0

Tôi nghĩ phương thức click() trong javascript mô phỏng nhấp vào nút. Vì vậy, đây phải là một loại vòng lặp vô hạn ...

Edited thêm: Kiểm tra MSDN cho tài liệu của phương pháp bấm

7

phần tử DOM có một click() phương pháp tự nhiên.

Sau đây sẽ hiển thị nhấp chuột đó là một phương pháp có nguồn gốc:

<input type="radio" onclick="alert(click.toString())"> 

Bạn có thể đăng ký chức năng nhấp chuột của bạn như là xử lý sự kiện như sau. Trong trình xử lý, this sẽ tham chiếu đến phần tử HTML.

<input type="radio" id="foo" > 

function click() 
{ 
    alert("click"); 
} 
document.getElementById('foo').onclick = click; 

Có một loạt tuyệt vời của bài viết về sự kiện trình duyệt tại http://www.quirksmode.org/js/introevents.html

0

nghe tiếng 'click' bởi chính nó không phải là một reserved keyword javascript bên ngoài bối cảnh xử lý sự kiện inline như Slaks trả lời.

Tức là phương pháp "nhấp" được xác định trong câu hỏi là hợp lệ. Gắn trình xử lý sự kiện 'bên ngoài' sẽ hoạt động. Ví dụ. sử dụng jQuery:

$('input').click(click); 
Các vấn đề liên quan