2013-03-27 69 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

相關問題