Có một số cách để xử lý sự kiện với HTML/DOM. Không có cách nào đúng hay sai, nhưng những cách khác nhau lại hữu ích trong các tình huống khác nhau.
1: Có định nghĩa nó trong HTML:
<input id="clickMe" type="button" value="clickme" onclick="doFunction();" />
2: Có thêm nó vào thuộc tính DOM cho sự kiện trong Javascript:
//- Using a function pointer:
document.getElementById("clickMe").onclick = doFunction;
//- Using an anonymous function:
document.getElementById("clickMe").onclick = function() { alert('hello!'); };
3: Và có gắn một chức năng để trình xử lý sự kiện bằng cách sử dụng Javascript:
var el = document.getElementById("clickMe");
if (el.addEventListener)
el.addEventListener("click", doFunction, false);
else if (el.attachEvent)
el.attachEvent('onclick', doFunction);
Cả hai phương pháp thứ hai và thứ ba đều cho phép nội tuyến/anonymou Các hàm s và cả hai phải được khai báo sau khi phần tử đã được phân tích cú pháp từ tài liệu. Phương thức đầu tiên không phải là XHTML hợp lệ vì thuộc tính onclick không có trong đặc tả XHTML.
Phương thức thứ nhất và thứ hai là loại trừ lẫn nhau, có nghĩa là sử dụng một (số 2) sẽ ghi đè lên phương thức kia (số 1). Phương thức thứ 3 sẽ cho phép bạn đính kèm nhiều hàm như bạn muốn cho cùng một trình xử lý sự kiện, ngay cả khi phương thức thứ nhất hoặc thứ hai cũng đã được sử dụng.
Rất có thể, sự cố nằm ở đâu đó trong hàm CapacityChart()
của bạn. Sau khi truy cập vào liên kết của bạn và chạy tập lệnh của bạn, hàm CapacityChart() chạy và hai cửa sổ bật lên được mở (một cửa sổ được đóng theo kịch bản lệnh).Nơi bạn có dòng sau:
CapacityWindow.document.write(s);
Hãy thử như sau thay vì:
CapacityWindow.document.open("text/html");
CapacityWindow.document.write(s);
CapacityWindow.document.close();
EDIT
Khi tôi nhìn thấy mã của bạn tôi nghĩ bạn đang viết nó đặc biệt dành cho IE. Như những người khác đã đề cập, bạn cần phải thay thế các tham chiếu đến document.all
bằng document.getElementById
. Tuy nhiên, bạn vẫn sẽ có nhiệm vụ sửa kịch bản sau này vì vậy tôi khuyên bạn nên làm việc trong ít nhất IE trước vì bất kỳ lỗi nào bạn thực hiện thay đổi mã để làm việc qua trình duyệt có thể gây nhầm lẫn nhiều hơn nữa. Một khi nó làm việc trong IE nó sẽ dễ dàng hơn để nói nếu nó làm việc trong các trình duyệt khác trong khi bạn đang cập nhật mã.
xin vui lòng xác định "doesn dường như không hoạt động chính xác ". bạn đang gặp lỗi nào khi nhấp vào? –
Nút hoạt động trong IE8, nhưng không phải FF 3.5 do lỗi JavaScript (xem câu trả lời của Jeff) –
Vâng, hóa ra document.all là một điều IE không chuẩn; đã cập nhật câu trả lời của tôi bằng cách thay thế được đề xuất. – Jeff