สิ่งที่เกิดขึ้นคือระบบกำลังส่งแบบฟอร์มและกำลังรีเฟรชหน้า (ด้วยเนื้อหาต้นฉบับ) คุณกำลังจัดการclick
กิจกรรมด้วยปุ่มส่ง
หากคุณต้องการลบองค์ประกอบและไม่ส่งแบบฟอร์มให้จัดการsubmit
เหตุการณ์ในแบบฟอร์มแทนแล้วส่งคืนfalse
จากตัวจัดการของคุณ:
HTML:
<form onsubmit="return removeDummy(); ">
<input type="submit" value="Remove DUMMY"/>
</form>
JavaScript:
function removeDummy() {
var elem = document.getElementById('dummy');
elem.parentNode.removeChild(elem);
return false;
}
แต่คุณไม่ต้องการ (หรือต้องการ) แบบฟอร์มสำหรับสิ่งนั้นเลยไม่ใช่หากจุดประสงค์เดียวคือการลบ D Dummy div แทน:
HTML:
<input type="button" value="Remove DUMMY" onclick="removeDummy()" />
JavaScript:
function removeDummy() {
var elem = document.getElementById('dummy');
elem.parentNode.removeChild(elem);
return false;
}
อย่างไรก็ตามรูปแบบของการตั้งค่าตัวจัดการเหตุการณ์นั้นล้าสมัย ดูเหมือนคุณจะมีสัญชาตญาณที่ดีในการที่โค้ด JavaScript ของคุณอยู่ในไฟล์ของตัวเองและเช่นนั้น ขั้นตอนต่อไปคือการดำเนินการต่อไปและหลีกเลี่ยงการใช้onXYZ
แอตทริบิวต์สำหรับการเชื่อมต่อตัวจัดการเหตุการณ์ ใน JavaScript ของคุณคุณสามารถเชื่อมต่อกับวิธีที่ใหม่กว่า (ประมาณปี 2000) แทน:
HTML:
<input id='btnRemoveDummy' type="button" value="Remove DUMMY"/>
JavaScript:
function removeDummy() {
var elem = document.getElementById('dummy');
elem.parentNode.removeChild(elem);
return false;
}
function pageInit() {
// Hook up the "remove dummy" button
var btn = document.getElementById('btnRemoveDummy');
if (btn.addEventListener) {
// DOM2 standard
btn.addEventListener('click', removeDummy, false);
}
else if (btn.attachEvent) {
// IE (IE9 finally supports the above, though)
btn.attachEvent('onclick', removeDummy);
}
else {
// Really old or non-standard browser, try DOM0
btn.onclick = removeDummy;
}
}
... จากนั้นเรียกpageInit();
จากscript
แท็กที่ส่วนท้ายสุดของหน้าของคุณbody
(ก่อน</body>
แท็กปิด) หรือจากภายในwindow
load
เหตุการณ์แม้ว่าจะเกิดขึ้นช้ามากในรอบการโหลดหน้าเว็บและโดยปกติแล้วจะไม่ดีสำหรับการเชื่อมโยงเหตุการณ์ ตัวจัดการ (เกิดขึ้นหลังจากโหลดรูปภาพทั้งหมดแล้วในที่สุด)
โปรดทราบว่าฉันต้องจัดการบางอย่างเพื่อจัดการกับความแตกต่างของเบราว์เซอร์ คุณอาจต้องการฟังก์ชั่นสำหรับเชื่อมโยงเหตุการณ์เพื่อที่คุณจะได้ไม่ต้องใช้ตรรกะนั้นซ้ำทุกครั้ง หรือพิจารณาใช้ไลบรารีเช่นjQuery , Prototype , YUI , Closureหรืออื่น ๆ อีกมากมายเพื่อปรับความแตกต่างของเบราว์เซอร์ให้คุณ เป็นสิ่งสำคัญมากที่จะต้องทำความเข้าใจกับสิ่งที่เกิดขึ้นทั้งในแง่ของพื้นฐาน JavaScript และพื้นฐาน DOM แต่ไลบรารีจะจัดการกับความไม่สอดคล้องกันมากมายและยังมียูทิลิตี้ที่มีประโยชน์มากมายเช่นวิธีการเชื่อมต่อตัวจัดการเหตุการณ์ที่เกี่ยวข้องกับ ความแตกต่างของเบราว์เซอร์ ส่วนใหญ่ยังมีวิธีตั้งค่าฟังก์ชัน (เช่นpageInit
) เพื่อทำงานทันทีที่ DOM พร้อมที่จะจัดการก่อนที่จะwindow
load
เกิดการยิง