2013-07-02 42 views
0

我使用這樣的JavaScript基於一個下拉選擇類似下面加載不同的形式:使用Javascript/PHP重新填充下拉失敗

<select id = "opts" onchange = "showForm()"> 
<option value = "0">Select Option</option> 
<option value = "1">Option 1</option> 
<option value = "2">Option 2</option> 
</select> 

<div id = "f1" style="display:none"> 
<form name= "form1"> 
Content of Form 1 
</form> 
</div> 

<div id = "f2" style="display:none"> 
<form name= "form2"> 
Content of Form 2 
</form> 
</div> 

<script type = "text/javascript"> 
function showForm(){ 
var selopt = document.getElementById("opts").value; 
if (selopt == 1) { 
document.getElementById("f1").style.display="block"; 
document.getElementById("f2").style.display="none"; 
} 
if (selopt == 2) { 
document.getElementById("f2").style.display="block"; 
document.getElementById("f1").style.display="none"; 
} 
} 

</script> 

我已刪除了實際上形成細節,因爲事不在此刻。不管怎麼說,當表單提交它通過一系列驗證的:

if (isset($_POST['submitted'])) { 
//validation codes 

} 

這個偉大的工程,但如果驗證失敗,它重新加載頁面,因此重置下拉框,並且沒有顯示出以前選擇的選項。我希望它保持以前的選擇,或只是例如在提交失敗時將選擇1加載到javascript位。有任何想法嗎?

伊恩

回答

0

你可以,如果確認使用這個PHP將設置選擇到不管它是失敗

window.onload = function(){ 
    document.getElementById("opts").value = <?php echo $_POST['opts']; ?>; 
} 
+0

爲什麼在JavaScript的結尾?它應該在頁面上,最好在頭部。 – mplungjan

+0

謝謝。我做了一些非常類似的驗證後,它重新加載選項1和驗證表單2重新加載選項2. – snookian

+0

你試過我的建議嗎?這裏沒有顯示/隱藏你的函數中的標籤,除非選項CHANGE。無論如何我都會顯示/隱藏 – mplungjan

0

使用此

window.onload=function() { 
    document.getElementById("opts").onchange=function() { 
    var selopt = this.value; 
    document.getElementById("f1").style.display=(selopt==1)?"block":"none"; 
    document.getElementById("f2").style.display=(selopt==2)?"block":"none"; 
    } 
    document.getElementById("opts").onchange(); // show/hide when reloaded 
} 

在您的JavaScript結束做到這一點提交時

<? $sel = $_POST['opts']; ?> 
<select name="opts" id ="opts"> 
<option value = "0"<? if ($sel==0) echo " selected ";?>>Select Option</option> 
<option value = "1"<? if ($sel==1) echo " selected ";?>>Option 1</option> 
<option value = "2"<? if ($sel==2) echo " selected ";?>>Option 2</option> 
</select>