Có một số cách để xử lý các sự kiện với HTML / DOM. Không có cách nào đúng hay sai nhưng cách khác nhau rất 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ó đính kèm một chức năng cho trình xử lý sự kiện bằ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 thức thứ hai và thứ ba đều cho phép các hàm nội tuyến / ẩn danh 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 hợp lệ XHTML vì thuộc tính onclick không có trong đặc tả XHTML.
Các phương thức 1 và 2 là loại trừ lẫn nhau, nghĩa là sử dụng một (thứ 2) sẽ ghi đè lên phương thức kia (thứ 1). Phương thức thứ 3 sẽ cho phép bạn đính kèm bao nhiêu chức năng tùy thích vào cùng một trình xử lý sự kiện, ngay cả khi phương thức 1 hoặc 2 cũng đã được sử dụng.
Nhiều khả năng, vấn đề nằm ở đâu đó trong CapacityChart()
chức năng của bạn . Sau khi truy cập liên kết của bạn và chạy tập lệnh của bạn, hàm ProfitChart () sẽ chạy và hai cửa sổ bật lên được mở (một được đóng theo kịch bản). Nơi bạn có dòng sau:
CapacityWindow.document.write(s);
Thay vào đó, hãy thử các cách sau:
CapacityWindow.document.open("text/html");
CapacityWindow.document.write(s);
CapacityWindow.document.close();
EDIT
Khi tôi thấy mã của bạn, tôi nghĩ rằng bạn đang viết nó đặc biệt cho IE. Như những người khác đã đề cập, bạn sẽ cần phải thay thế các tài liệu tham khảo document.all
với document.getElementById
. Tuy nhiên, bạn vẫn sẽ có nhiệm vụ sửa tập lệnh sau đó, vì vậy tôi khuyên bạn nên làm cho nó hoạt động trong ít nhất IE vì bất kỳ lỗi nào bạn thực hiện khi thay đổi mã để làm việc trên trình duyệt chéo có thể gây ra nhiều nhầm lẫn hơn. Khi nó hoạt động trong IE, sẽ dễ dàng hơn nếu nó hoạt động trong các trình duyệt khác trong khi bạn đang cập nhật mã.