มีสองสามวิธีในการจัดการเหตุการณ์ด้วย HTML / DOM ไม่มีวิธีที่ถูกหรือผิดจริง แต่วิธีต่าง ๆ มีประโยชน์ในสถานการณ์ที่แตกต่าง
1: มีการกำหนดไว้ใน HTML:
<input id="clickMe" type="button" value="clickme" onclick="doFunction();" />
2: มีการเพิ่มลงในคุณสมบัติ DOM สำหรับเหตุการณ์ใน Javascript:
//- Using a function pointer:
document.getElementById("clickMe").onclick = doFunction;
//- Using an anonymous function:
document.getElementById("clickMe").onclick = function () { alert('hello!'); };
3: และมีการแนบฟังก์ชันกับตัวจัดการเหตุการณ์โดยใช้ Javascript:
var el = document.getElementById("clickMe");
if (el.addEventListener)
el.addEventListener("click", doFunction, false);
else if (el.attachEvent)
el.attachEvent('onclick', doFunction);
ทั้งวิธีที่สองและที่สามอนุญาตให้มีฟังก์ชั่นอินไลน์ / ไม่ระบุชื่อและทั้งสองจะต้องประกาศหลังจากองค์ประกอบได้รับการแยกวิเคราะห์จากเอกสาร วิธีแรกไม่ถูกต้อง XHTML เนื่องจากแอตทริบิวต์ onclick ไม่ได้อยู่ในข้อกำหนด XHTML
วิธีที่ 1 และ 2 เป็นวิธีที่ไม่เกิดร่วมกันซึ่งหมายความว่าการใช้วิธีหนึ่ง (วิธีที่สอง) จะแทนที่วิธีอื่น ๆ (วิธีที่หนึ่ง) วิธีที่ 3 จะช่วยให้คุณสามารถแนบฟังก์ชั่นได้มากเท่าที่คุณต้องการกับตัวจัดการเหตุการณ์เดียวกันแม้ว่าจะใช้วิธีที่ 1 หรือ 2 ก็ตาม
เป็นไปได้มากว่าปัญหาอยู่ที่ใดที่หนึ่งในCapacityChart()
ฟังก์ชันของคุณ หลังจากเยี่ยมชมลิงก์ของคุณและเรียกใช้สคริปต์ของคุณฟังก์ชัน CapacityChart () จะทำงานและป๊อปอัปทั้งสองจะเปิดขึ้น (หนึ่งอันจะถูกปิดตามสคริปต์) ที่ที่คุณมีบรรทัดต่อไปนี้:
CapacityWindow.document.write(s);
ลองทำสิ่งต่อไปนี้แทน:
CapacityWindow.document.open("text/html");
CapacityWindow.document.write(s);
CapacityWindow.document.close();
แก้ไข
เมื่อฉันเห็นรหัสของคุณฉันคิดว่าคุณเขียนโดยเฉพาะสำหรับ IE เป็นคนอื่นได้กล่าวถึงคุณจะต้องเปลี่ยนการอ้างอิงถึงกับdocument.all
document.getElementById
อย่างไรก็ตามคุณจะยังคงมีหน้าที่แก้ไขสคริปต์หลังจากนี้ดังนั้นฉันขอแนะนำให้ใช้งานอย่างน้อย IE ก่อนเนื่องจากความผิดพลาดใด ๆ ที่คุณทำเมื่อเปลี่ยนรหัสเพื่อทำงานข้ามเบราว์เซอร์อาจทำให้เกิดความสับสนมากขึ้น เมื่อมันทำงานใน IE มันจะง่ายกว่าที่จะบอกว่ามันทำงานบนเบราว์เซอร์อื่น ๆ ในขณะที่คุณกำลังอัพเดทรหัสหรือไม่