2015-04-20 46 views
0

我一直在使用一個簡單的腳本來彈出一個隱藏的div和一個絕對的hyperlink作爲用戶關閉彈出窗口的「故障安全」方式。現在我想在同一頁面上有多個「彈出窗口」,我需要進行調整,以便我不會通過ID進行定位。 getElementsbyClassName似乎沒有工作。Javascript Popup和Class代替ID

我現在HTML代碼:

<a href="javascript:void(0)" onclick="document.getElementById('buttonOne').style.display='block';document.getElementById('fade').style.display='block'">Button One</a> 
<a href="javascript:void(0)" onclick="document.getElementById('buttonTwo').style.display='block';document.getElementById('fade').style.display='block'">Button Two</a> 

<div id="buttonOne" class="white_content"><a class="closeWindow" href="javascript:void(0)" onclick="document.getElementById('buttonOne').style.display='none';document.getElementById('fade').style.display='none'">CLOSE</a> 
        <p>BUTTON ONE CONTENT</p> 
</div> 

<div id="buttonTwo" class="white_content"><a class="closeWindow" href="javascript:void(0)" onclick="document.getElementById('buttonOne').style.display='none';document.getElementById('fade').style.display='none'">CLOSE</a> 
        <p>BUTTON TWO CONTENT</p> 
</div> 

<div id="fade" class="black_overlay"><a href="javascript:void(0)" onclick="document.getElementsByClassName('buttonOne').style.display='none';document.getElementById('fade').style.display='none'"></a></div> 

有些CSS

.black_overlay{ 
    display: none; 
    position: fixed; 
    top: 0%; 
    left: 0%; 
    width: 100%; 
    height: 100%; 
    background-color: black; 
    z-index:1001; 
    -moz-opacity: 0.8; 
    opacity:.80; 
    filter: alpha(opacity=80); 
} 

.black_overlay a { 
    display:block; 
    width:100%; 
    height:100%; 
    cursor:unset; 
} 

.white_content { 
    display: none; 
    position: fixed; 
    top: 12%; 
    left: 12%; 
    width: 75%; 
    height: 75%; 
    padding: 16px; 
    background-color: white; 
    z-index:1002; 
    overflow: auto; 
} 

所以彈出觸發器/按鈕做工精細,因爲我可以將每個按鈕連接到其各自的內容window具有唯一的ID。但底部的div(#fade)是窗口後面的內容,並用半透明覆蓋填充背景。我喜歡有一個巨大的鏈接,當你在內容窗口之外點擊時關閉窗口。由於它需要通過ID將當前打開的div容器作爲目標,所以我不知所措。

我試圖用document.getElementsbyClassName替換那裏的鏈接,並給所有窗口提供相同的類,但是我得到undefined錯誤。

任何幫助將不勝感激!

+0

不錯的一個把所有必要的標記和CSS在那裏的問題。你會驚訝多久沒做完 - 這是在這種情況下獲得快速答案的關鍵。我所要做的就是將你的代碼放入Stack Snippet,環顧四周,然後調整。 –

回答

2

一個變化最小的解決方案是使用全局變量來跟蹤激活鍵,這樣的(全球爲activeButton,代碼的變化是爲a標籤和#fade標籤onclick屬性,並有一點點JavaScript的聲明變量):

var activeButton;
.black_overlay{ 
 
    display: none; 
 
    position: fixed; 
 
    top: 0%; 
 
    left: 0%; 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: black; 
 
    z-index:1001; 
 
    -moz-opacity: 0.8; 
 
    opacity:.80; 
 
    filter: alpha(opacity=80); 
 
} 
 

 
.black_overlay a { 
 
    display:block; 
 
    width:100%; 
 
    height:100%; 
 
    cursor:unset; 
 
} 
 

 
.white_content { 
 
    display: none; 
 
    position: fixed; 
 
    top: 12%; 
 
    left: 12%; 
 
    width: 75%; 
 
    height: 75%; 
 
    padding: 16px; 
 
    background-color: white; 
 
    z-index:1002; 
 
    overflow: auto; 
 
}
<a href="javascript:void(0)" onclick="activeButton = document.getElementById('buttonOne'); activeButton.style.display='block';document.getElementById('fade').style.display='block'">Button One</a> 
 
<a href="javascript:void(0)" onclick="activeButton = document.getElementById('buttonTwo'); activeButton.style.display='block';document.getElementById('fade').style.display='block'">Button Two</a> 
 

 
<div id="buttonOne" class="white_content"><a class="closeWindow" href="javascript:void(0)" onclick="document.getElementById('buttonOne').style.display='none';document.getElementById('fade').style.display='none'">CLOSE</a> 
 
        <p>BUTTON ONE CONTENT</p> 
 
</div> 
 

 
<div id="buttonTwo" class="white_content"><a class="closeWindow" href="javascript:void(0)" onclick="document.getElementById('buttonOne').style.display='none';document.getElementById('fade').style.display='none'">CLOSE</a> 
 
        <p>BUTTON TWO CONTENT</p> 
 
</div> 
 

 
<div id="fade" class="black_overlay"><a href="javascript:void(0)" onclick="if (activeButton) { activeButton.style.display='none';} activeButton = undefined;document.getElementById('fade').style.display='none'"></a></div>

我會強烈建議將所有這些JavaScript從onclick=...屬性中移出並放入函數中,但不僅僅是因爲它可以減少很多代碼重複。

+0

非常感謝您的採訪。你的建議工作完美。我現在注意到,當我嘗試編輯它以匿名時,我甚至將我的示例代碼弄糟了...所以感謝您仍然理解它。關於你提出的關於創建一個消除多餘代碼的函數的建議,請問我將如何去做這件事的一個例子是不是很糟糕? –

+0

@NathanS你可以添加.onclick方法或.addEventListener('click',function(){});你的javscript裏面有一個w3schools的鏈接,所以你可以查看http://www.w3schools.com/jsref/event_onclick.asp – Enjayy

+0

@NathanS:不一定,不。不過,我擔心我的牀已經過期了。 :-)很高興這有助於!查看'addEventListener'(IE8及更早版本的'attachEvent')。 –