2012-02-29 20 views
5

Tôi có một danh sách các nút (hình vuông) trong HTML như thế này -Làm thế nào để thêm xử lý sự kiện cho nút HTML từ bên trong mã javascript

<td><button id="18" ></button></td> 
    <td><button id="28" ></button></td> 
    <td><button id="38" ></button></td> 
      ... 

Trước đó, đối với mỗi nút, tôi đã phải đặt mã trong nút tự thêm thẻ để thêm trình xử lý sự kiện, như thế này -

<button id="18" onclick="squareWasClicked(event)"> 

    function squareWasClicked(event) 
    { 
     var element = event.target; 

     // more code 
    } 

Nhưng bây giờ tôi đã phát hiện ra rằng nó không phải là thực hành tốt. Vì vậy, thay vào đó, tôi đang cố gắng thêm xử lý sự kiện từ bên trong mã javascript của tôi. Nhưng tôi không biết làm thế nào để làm điều đó. Cho đến nay, tôi đã thử điều này -

function assignEventsToSquares() 
    { 
    var i,j; 

    for(i=1;i<=8;i++) 
     { 
     for(j=1;j<=8;j++) 
     { 
      var squareID = "" + i + "" + j; 
      var square = document.getElementById(squareID);   
      square.onclick = squareWasClicked(); 
     } 
     } 
    } 

Nhưng điều này chỉ đơn giản gọi hàm squareWasClicked(). Vì vậy, làm thế nào để tôi thêm nó như là một xử lý sự kiện để các chức năng sẽ được gọi khi vuông được nhấp? Ngoài ra, làm cách nào để nói điều gì đó giống như

 square.onclick = squareWasClicked(event); 

sự kiện không được phát hiện trong mã JavaScript. Hãy giúp tôi.

Trả lời

5
square.onclick = squareWasClicked(); 

này gọi chức năng nhấp chuột của bạn và gán kết quả để lắng nghe sự kiện của nguyên tố của bạn, mà không phải là những gì bạn muốn. Loại bỏ các () s để bản thân chức năng được gán. Do đó, nó sẽ giống như thế này

square.onclick = squareWasClicked; 
+0

Cảm ơn! Điều đó thật ngắn gọn! Tại sao lại sử dụng addEventListener? Đó là cú pháp cũ hơn? – CodeBlue

+1

'addEventListener' là một cú pháp * mới hơn * (xuất hiện trong DOM 2, trái với trình nghe DOM 0 bạn đang cân nhắc.) Nếu bạn không sử dụng DOM 2, bạn đang bỏ lỡ! :) –

5

Sử dụng element.addEventListener() (có nguồn gốc từ số DOM 2 Events spec). Trong trường hợp của bạn nó sẽ được

document.getElementById("18").addEventListener("click", squareWasClicked, false); 
+0

Trên một mặt lưu ý, theo [đặc tả] (http://www.w3.org/TR/html4/types.html#type-name), _ "Mã thông báo ID và NAME phải bắt đầu bằng một chữ cái ([A-Za-z]) và có thể được theo sau bởi bất kỳ số chữ cái, chữ số ([0-9]), dấu gạch nối (" - "), dấu gạch dưới (" _ "), dấu hai chấm (":") và dấu chấm ("."). "_ –

+0

Đối với các phiên bản cũ hơn của IE (trước IE9), bạn sẽ cần sử dụng' attachEvent() 'vì chúng không hỗ trợ' addEventListener'. – jfriend00

+0

Phải, có [giải pháp đa trình duyệt] (http://dustindiaz.com/rock-solid-addevent) cho việc này. –

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