2013-03-27 71 views
7

我正在建设一个灯箱作为一个学校项目,我不能使用jQuery。我有一张图片。当你点击它时,Javascript会创建一个ID为“overlay”的透明div。我想要div自己删除,或者父母删除它,但它不起作用。我认为这与你不能将'onclick'链接到尚不存在的元素的事实有关。创建一个可以自己删除它的元素?

+3

是的,你不能。因此,在将它附加到身体后设置钩子。此外,您的问题会受益于您尝试过的某些代码和示例,以及出错的原因。 – Dave 2013-03-27 00:51:13

+0

您可以发布您的当前HTML输出和脚本,请使用它来创建叠加层。也许我们可以添加一个'setTimeout',如果你想根据一定的时间自动删除它,如果可行的话,或者我们可以添加一个事件到父元素来删除它。尽管如此,它会使相关代码变得更容易。 – Nope 2013-03-27 01:07:14

回答

19

您必须从父项中移除元素。事情是这样的:

d = document.getElementById('overlay'); 
d.parentNode.removeChild(d); 

或者你可以只隐藏:

d.style.display = 'none'; 

而且,哦:您可以通过给onclick属性分配函数添加Javascript代码到(新建)元素。

d = document.createElement('div'); 
d.onclick = function(e) { this.parentNode.removeChild(this) }; 
1

不要在标签中使用onclick处理函数,请使用Javascripts事件函数(如addEventListener)将事件动态添加到元素中。您还应该确保在删除元素时,您可以清理所有引用(换句话说,取消注册事件处理程序)。

+0

Downvote介意阐述? – 2013-03-27 01:44:24

0

我知道了:) 我做它像巴特悲伤,但没有奏效。我的代码看起来是这样的:

image.onclick = function(){ *create overlay*}; 
overlay.oncklick = function() {*overlay.parentNode.removeChild(overlay)*}; 

浏览器就像wtf?导致它读取代码并认为“我无法检查用户是否单击了一个不存在的元素。” 所以我这样做:

image.onclick = function(){ 

*create overlay* 

overlay.onclick = function() {*remove overlay*}; 
}; 
+0

thnx大家! – Sam 2013-03-27 11:10:40

相关问题