2016-11-01 133 views
-2

我使用foreach循環來獲取一些帶有不同id的選項卡。通過這種方式,我可以獲得標籤tab1,tab2,tab3等。比我想要使用javascript獲得每個標籤的id時,它只返回第一個標籤的id並將其用於所有標籤。它不像php那樣循環。爲什麼?JavaScript只從foreach循環獲取第一個id。爲什麼?

<?php 
foreach ($DB_con->query($foos) as $foo) { 
    ?> 
    <div id='tab<?php echo $counter_foo; ?>'> 

    <div id="divid" style="visibility: hidden"><?php echo $counter_foo; ?></div> 
    <script> 
    $(document).ready(function() { 
     var dividvalue = document.getElementById('divid').innerHTML; 
     alert(dividvalue); 
    }); 
    </script> 
    <?php 
} 
?> 
+5

按照通常,DOM IDS **必須**是唯一的,因爲你輸出多個相同的ID,只有第一個將永遠不會回來了。這就是爲什麼該函數被稱爲getElementByID,而不是getElement(s)ByID –

+0

[___文檔中不能有多個'元素''具有相同'id'值.___](https://www.w3.org /TR/html-markup/global-attributes.html#common.attrs.id) – Rayon

+0

對不起,如果我誤解,我會得到不同的id(如id =「tab1」,id =「tab2」,id =「tab3」等) )通過使用PHP。這就是爲什麼我使用foreach循環。我們怎麼說「輸出多個相同的ID」? –

回答

0

改變你的HTML idclass,並使用getElementsByClassName,而不是在JavaScript getElementById你。

你的div:

<div class="divid"> <!-- etc --> 

和你的JS ..

var dividvalue = document.getElementsByClassName('divid')[0].innerHTML; 

而且考慮改變dividdivclass一致性的緣故。

完整編輯的代碼:

<script> 
var i = 0; 
</script> 
<?php 
foreach ($DB_con->query($foos) as $foo) { 
    ?> 
    <div id='tab<?php echo $counter_foo; ?>'> 

    <div class="divclass" style="visibility: hidden"><?php echo $counter_foo; ?></div> 
    <script> 
    $(document).ready(function() { 
     var divclassvalue = document.getElementsByClassName('divclass')[i].innerHTML; 
     alert(divclassvalue); 
     i++; 
    }); 
    </script> 
    <?php 
} 
?> 
+0

感謝您的回覆,但localhost說「未定義」! –

+0

使用代碼var dividvalue = document.getElementsByClassName('divid')[0] .innerHTML;我沒有得到任何未定義的結果:-)但問題仍然是一樣的:我總是得到第一個ID! –

+0

我已經用完整的代碼更新了答案。試試看。 –