发生的情况是正在提交表单,因此页面(带有其原始内容)正在刷新。您正在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;
}
但是您根本不需要(或不需要)表单,如果它的唯一目的是删除虚拟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
触发。