2017-03-29 54 views
0

我有兩個選項卡部分,我希望默認選擇每個選項卡部分的第一個選項卡。在這種情況下,選項卡1和選項卡4。我怎樣才能做到這一點?如何選擇選項卡1和選項

在我的嘗試中,我創建了一個按類名選擇的循環,但我注意到只有循環中的最後一個元素總是被選中而不是全部。我沒有列入,因爲我認爲問題是一次只能選擇一個標籤,但我不明白這個陳述在哪裏。

一星期前剛剛拿起js。這是我從w3schools獲得的一個修改示例。

 <!DOCTYPE html> 
<html> 
<head> 
<style> 
body {font-family: "Lato", sans-serif;} 

/* Style the tab */ 
div.tab { 
    overflow: hidden; 
    border: 1px solid #ccc; 
    background-color: #f1f1f1; 
} 

/* Style the buttons inside the tab */ 
div.tab button { 
    background-color: inherit; 
    float: left; 
    border: none; 
    outline: none; 
    cursor: pointer; 
    padding: 14px 16px; 
    transition: 0.3s; 
    font-size: 17px; 
} 

/* Change background color of buttons on hover */ 
div.tab button:hover { 
    background-color: #ddd; 
} 

/* Create an active/current tablink class */ 
div.tab button.active { 
    background-color: #ccc; 
} 

/* Style the tab content */ 
.tabcontent { 
    display: none; 
    padding: 6px 12px; 
    border: 1px solid #ccc; 
    border-top: none; 
} 

/* Style the close button */ 
.topright { 
    float: right; 
    cursor: pointer; 
    font-size: 20px; 
} 

.topright:hover {color: red;} 
</style> 
</head> 
<body> 

<p>Click on the x button in the top right corner to close the current tab:</p> 

<div class="tab"> 
    <button class="tablinks" onclick="openCity(event, 'London')" id="defaultOpen1">London</button> 
    <button class="tablinks" onclick="openCity(event, 'Paris')">Paris</button> 
    <button class="tablinks" onclick="openCity(event, 'Tokyo')">Tokyo</button> 
</div> 

<div id="London" class="tabcontent"> 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
    <h3>London</h3> 
    <p>London is the capital city of England.</p> 
</div> 

<div id="Paris" class="tabcontent"> 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
    <h3>Paris</h3> 
    <p>Paris is the capital of France.</p> 
</div> 

<div id="Tokyo" class="tabcontent"> 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
    <h3>Tokyo</h3> 
    <p>Tokyo is the capital of Japan.</p> 
</div> 

<p>Click on the x button in the top right corner to close the current tab:</p> 

<div class="tab"> 
    <button class="tablinks" onclick="openCity(event, '1')" id="defaultOpen2">1</button> 
    <button class="tablinks" onclick="openCity(event, '2')">2</button> 
    <button class="tablinks" onclick="openCity(event, '3')">3</button> 
</div> 

<div id="1" class="tabcontent"> 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
    <h3>London</h3> 
    <p>London is the capital city of England.</p> 
</div> 

<div id="2" class="tabcontent"> 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
    <h3>Paris</h3> 
    <p>Paris is the capital of France.</p> 
</div> 

<div id="3" class="tabcontent"> 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
    <h3>Tokyo</h3> 
    <p>Tokyo is the capital of Japan.</p> 
</div> 

<script> 
function openCity(evt, cityName) { 
    var i, tabcontent, tablinks; 
    tabcontent = document.getElementsByClassName("tabcontent"); 
    for (i = 0; i < tabcontent.length; i++) { 
     tabcontent[i].style.display = "none"; 
    } 
    tablinks = document.getElementsByClassName("tablinks"); 
    for (i = 0; i < tablinks.length; i++) { 
     tablinks[i].className = tablinks[i].className.replace(" active", ""); 
    } 
    document.getElementById(cityName).style.display = "block"; 
    evt.currentTarget.className += " active"; 
} 

// Get the element with id="defaultOpen" and click on it 
document.getElementById("defaultOpen1").click(); 
document.getElementById("defaultOpen2").click(); 
</script> 

</body> 
</html> 
+0

沒有標籤4 ..第一部分只有3個標籤,第二部分只有3個標籤! –

+0

對不起。我的意思是默認打開每個部分的第一個選項卡。 – user3085351

回答

0

的問題是,當你點擊你正在全球範圍內呼叫的標籤鏈接,這樣的JavaScript開始尋找類tabContent並隱藏所有的人,即使他們不你想隱藏的那個,爲了解決這個問題,你可以將標籤包裝在一個div中,當你點擊tablink時,首先找到你所擁有的標籤容器的ID,然後找到正確的內容來顯示和隱藏。我在代碼中做了一些調整。

注:這是一個解決方案,但肯定有一個更好的方式來做到這一點的標籤

function openCity(evt, cityName) { 
 
    var i, tabcontent, tablinks; 
 
    var parent = evt.target.parentNode.parentNode.className; 
 
    console.log(parent); 
 
    tabcontent = document.querySelectorAll("." + parent + " .tabcontent"); 
 
    for (i = 0; i < tabcontent.length; i++) { 
 
     tabcontent[i].style.display = "none"; 
 
    } 
 
    tablinks = document.querySelectorAll("." + parent + " .tablinks"); 
 
    for (i = 0; i < tablinks.length; i++) { 
 
     tablinks[i].className = tablinks[i].className.replace(" active", ""); 
 
    } 
 
// document.getElementById(cityName).style.display = "block"; 
 

 

 
    document.querySelector("." + parent +" #" + cityName).style.display = "block"; 
 
// console.log(this) 
 
    evt.currentTarget.className += " active"; 
 
} 
 

 
// Get the element with id="defaultOpen" and click on it 
 
document.getElementById("defaultOpen1").click(); 
 
document.getElementById("defaultOpen2").click();
body {font-family: "Lato", sans-serif;} 
 

 
/* Style the tab */ 
 
div.tab { 
 
    overflow: hidden; 
 
    border: 1px solid #ccc; 
 
    background-color: #f1f1f1; 
 
} 
 

 
/* Style the buttons inside the tab */ 
 
div.tab button { 
 
    background-color: inherit; 
 
    float: left; 
 
    border: none; 
 
    outline: none; 
 
    cursor: pointer; 
 
    padding: 14px 16px; 
 
    transition: 0.3s; 
 
    font-size: 17px; 
 
} 
 

 
/* Change background color of buttons on hover */ 
 
div.tab button:hover { 
 
    background-color: #ddd; 
 
} 
 

 
/* Create an active/current tablink class */ 
 
div.tab button.active { 
 
    background-color: #ccc; 
 
} 
 

 
/* Style the tab content */ 
 
.tabcontent { 
 
    display: none; 
 
    padding: 6px 12px; 
 
    border: 1px solid #ccc; 
 
    border-top: none; 
 
} 
 

 
/* Style the close button */ 
 
.topright { 
 
    float: right; 
 
    cursor: pointer; 
 
    font-size: 20px; 
 
} 
 

 
.topright:hover {color: red;}
 <!DOCTYPE html> 
 
<html> 
 
<head> 
 
</head> 
 
<body> 
 

 
<p>Click on the x button in the top right corner to close the current tab:</p> 
 
<div class="cities"> 
 
    <div class="tab"> 
 
    <button class="tablinks" onclick="openCity(event, 'London')" id="defaultOpen1">London</button> 
 
    <button class="tablinks" onclick="openCity(event, 'Paris')">Paris</button> 
 
    <button class="tablinks" onclick="openCity(event, 'Tokyo')">Tokyo</button> 
 
    </div> 
 

 

 
    <div id="London" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>London</h3> 
 
    <p>London is the capital city of England.</p> 
 
    </div> 
 

 
    <div id="Paris" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>Paris</h3> 
 
    <p>Paris is the capital of France.</p> 
 
    </div> 
 

 
    <div id="Tokyo" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>Tokyo</h3> 
 
    <p>Tokyo is the capital of Japan.</p> 
 
    </div> 
 
</div> 
 

 
<p>Click on the x button in the top right corner to close the current tab:</p> 
 

 
<div class="countries"> 
 
    <div class="tab"> 
 
    <button class="tablinks" onclick="openCity(event, 'one')" id="defaultOpen2">1</button> 
 
    <button class="tablinks" onclick="openCity(event, 'two')">2</button> 
 
    <button class="tablinks" onclick="openCity(event, 'three')">3</button> 
 
    </div> 
 

 
    <div id="one" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>London</h3> 
 
    <p>London is the capital city of England.</p> 
 
    </div> 
 

 
    <div id="two" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>Paris</h3> 
 
    <p>Paris is the capital of France.</p> 
 
    </div> 
 

 
    <div id="three" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>Tokyo</h3> 
 
    <p>Tokyo is the capital of Japan.</p> 
 
    </div> 
 
</div> 
 

 
</body> 
 
</html>

+0

卡洛斯這是一個非常好的解決方案。謝謝。 – user3085351

0

不知道我是否明白你的意思。但這是一個工作小提琴。

我建議你爲你的選項卡添加一個容器DIV,這樣就可以更容易地獲得帶有javascript的第一個元素。

讓我知道你是否需要別的東西。

window.openCity = function (evt, cityName) { 
 
    var i, tabcontent, tablinks; 
 
    tabcontent = document.getElementsByClassName("tabcontent"); 
 
    for (i = 0; i < tabcontent.length; i++) { 
 
     tabcontent[i].style.display = "none"; 
 
    } 
 
    tablinks = document.getElementsByClassName("tablinks"); 
 
    for (i = 0; i < tablinks.length; i++) { 
 
     tablinks[i].className = tablinks[i].className.replace(" active", ""); 
 
    } 
 
    document.getElementById(cityName).style.display = "block"; 
 
    evt.currentTarget.className += " active"; 
 
} 
 

 

 
document.getElementById("London").style.display='block'; 
 
document.getElementById("1").style.display='block';
body {font-family: "Lato", sans-serif;} 
 

 
/* Style the tab */ 
 
div.tab { 
 
    overflow: hidden; 
 
    border: 1px solid #ccc; 
 
    background-color: #f1f1f1; 
 
} 
 

 
/* Style the buttons inside the tab */ 
 
div.tab button { 
 
    background-color: inherit; 
 
    float: left; 
 
    border: none; 
 
    outline: none; 
 
    cursor: pointer; 
 
    padding: 14px 16px; 
 
    transition: 0.3s; 
 
    font-size: 17px; 
 
} 
 

 
/* Change background color of buttons on hover */ 
 
div.tab button:hover, 
 
div.tab button.active{ 
 
    background-color: #ddd; 
 
} 
 

 
/* Create an active/current tablink class */ 
 
div.tab button.active { 
 
    background-color: #ccc; 
 
} 
 

 
/* Style the tab content */ 
 
.tabcontent { 
 
    display: none; 
 
    padding: 6px 12px; 
 
    border: 1px solid #ccc; 
 
    border-top: none; 
 
} 
 

 
/* Style the close button */ 
 
.topright { 
 
    float: right; 
 
    cursor: pointer; 
 
    font-size: 20px; 
 
} 
 

 
.topright:hover {color: red;}
<p>Click on the x button in the top right corner to close the current tab:</p> 
 

 
<div class="tab"> 
 
    <button class="tablinks active" onclick="openCity(this, 'London');" id="defaultOpen1">London</button> 
 
    <button class="tablinks" onclick="openCity(event, 'Paris')">Paris</button> 
 
    <button class="tablinks" onclick="openCity(event, 'Tokyo')">Tokyo</button> 
 
</div> 
 

 
<div id="London" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>London</h3> 
 
    <p>London is the capital city of England.</p> 
 
</div> 
 

 
<div id="Paris" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>Paris</h3> 
 
    <p>Paris is the capital of France.</p> 
 
</div> 
 

 
<div id="Tokyo" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>Tokyo</h3> 
 
    <p>Tokyo is the capital of Japan.</p> 
 
</div> 
 

 
<p>Click on the x button in the top right corner to close the current tab:</p> 
 

 
<div class="tab"> 
 
    <button class="tablinks" onclick="openCity(event, '1')" id="defaultOpen2">1</button> 
 
    <button class="tablinks" onclick="openCity(event, '2')">2</button> 
 
    <button class="tablinks" onclick="openCity(event, '3')">3</button> 
 
</div> 
 

 
<div id="1" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>London</h3> 
 
    <p>London is the capital city of England.</p> 
 
</div> 
 

 
<div id="2" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>Paris</h3> 
 
    <p>Paris is the capital of France.</p> 
 
</div> 
 

 
<div id="3" class="tabcontent"> 
 
    <span onclick="this.parentElement.style.display='none'" class="topright">x</span> 
 
    <h3>Tokyo</h3> 
 
    <p>Tokyo is the capital of Japan.</p> 
 
</div>

0

[不以英語爲母語]有

嗨。正在發生的事情是,你只用一個標籤來使用這兩個標籤。您需要隔離每個選項卡並對代碼進行一些更改,以便它能夠按照您的要求工作。

下面是用在部分評論的要點已經改變: https://gist.github.com/rdlagemann/720614ca5ca29726a9f671c0dd2d2385

希望它能幫助!

+0

拉斐爾這也是一個很好的解決方案。謝謝。 – user3085351

相關問題