2015-05-01 19 views
6

Tôi khá mới đối với JS, nhưng tôi đã lập trình bằng C trước đây và tôi đang cố gắng thu hút sự chú ý của toàn bộ sự kiện. Tôi đang cố gắng để tạo ra một kịch bản mà sẽ xác nhận đầu vào hình thức, tuy nhiên tất cả các mã của tôi đang được chạy - tất cả mọi thứ bên trong nếu/người khác, vòng, những gì có bạn - bất kể sự kiện xảy ra hay không. Để kiểm tra, và để làm cho nó dễ dàng hơn để đăng ở đây, tôi đã viết một chương trình đơn giản mà có vấn đề này quá.Javascript: Các hàm được gọi trên tải trang thay vì onclick/onsubmit

HTML:

<button id="test">Test</button> 

Javascript:

function init(){ 
    document.getElementById("test").onclick = alert("hello"); 
} 

window.onload = init; 

Từ những gì tôi hiểu, hàm init nên được gọi khi tải trang (window.onload), và cảnh báo sẽ bật lên khi nút có ID "test" được nhấp (onclick). Điều thực sự xảy ra là cảnh báo sẽ xuất hiện ngay sau khi trang tải và sẽ xuất hiện trở lại nếu tôi nhấn nút.

Suy nghĩ của tôi là tôi đã đưa ra một số giả định không chính xác về thứ tự mà JS được thực hiện, nhưng tôi không thể nghĩ đó là cái gì. Có ai có thể làm sáng tỏ điều này không?

Trả lời

10

Đó là không đúng, nó phải là:

function init(){ 
    document.getElementById("test").onclick = function() { alert("hello"); }; 
} 

Đây là bởi vì bạn cần trong JavaScript bạn cần phải gán các chức năng chính nó để click sự kiện (cảnh báo là một chức năng).

Cầm lấy cái này ví dụ:

function hello() { 
    alert("hello"); 
} 

document.getElementById("test").onclick = hello; 

Lưu ý rằng tôi không đặt dấu ngoặc () sau hello chức năng? Đó là bởi vì tôi đang sử dụng một tham chiếu đến chính hàm đó. Nếu tôi đặt dấu ngoặc đơn, tôi thực sự là đánh giá chức năng đó tại thời điểm chuyển nhượng nhấp chuột xảy ra.

Vì vậy, thực hiện:

document.getElementById("test").onclick = hello(); 

sẽ hiển thị cảnh báo sẽ hiển thị các alertngay sau dòng này đã được thực hiện.

+3

Nói cách khác: 'x = alert()' có nghĩa là: 'x' là giá trị trả về của' alert() 'statment. Và giá trị trả về là gì? Hãy thực hiện nó để tìm hiểu - và đó là nơi thực hiện xảy ra! – Xufox

+0

Cảm ơn bạn đã trả lời! Điều đó có ý nghĩa, thực sự. Nhưng làm thế nào tôi có thể chuyển một biến được sử dụng bởi hàm được kích hoạt mà tôi cũng muốn sử dụng trong hàm cha? Hoặc tôi chỉ đơn giản là sẽ sử dụng một biến toàn cầu? –

+2

Bạn sẽ phải quấn chức năng gọi chính nó vào một hàm, một cái gì đó như: 'onclick = function() {myFunction (myVariable); }; 'sẽ có cùng phạm vi – mattytommo

1

có chức năng javascript của bạn sẽ chỉ gọi khi trang sẽ được tải .Nếu bạn cũng muốn gọi đó là init() chức năng vào nút nhấp chuột thử nghiệm vì vậy hãy thử như thế này:

JavaScript:

function init(){ alert("hello"); } 
 

 
window.onload = init;
HTML: 
 
<button id="test" onClick='init()'>Test</button>

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