2010-02-11 59 views
21
<form method="get" action=""> 
    <select name="name"> 
     <option value="a">a</option> 
     <option value="b">b</option> 
    </select> 
    <select name="location"> 
     <option value="x">x</option> 
     <option value="y">y</option> 
    </select> 
    <input type="submit" value="Submit" class="submit" /> 
</form> 

在提交表單時,如何確保選定的值在下拉菜單中保持選中狀態?這個表單在wordpress(PHP)裏面。保存表格提交後選擇的值

回答

33

避免許多的if-else結構,讓JavaScript的做自動的伎倆:

<select name="name" id="name"> 
    <option value="a">a</option> 
    <option value="b">b</option> 
</select> 

<script type="text/javascript"> 
    document.getElementById('name').value = "<?php echo $_GET['name'];?>"; 
</script> 

<select name="location" id="location"> 
    <option value="x">x</option> 
    <option value="y">y</option> 
</select> 

<script type="text/javascript"> 
    document.getElementById('location').value = "<?php echo $_GET['location'];?>"; 
</script> 
+5

奇怪的解決方案IMO-介紹JavaScript來保存幾行PHP是沒有意義的。 – Yarin 2012-06-14 17:24:32

+0

@Yarin:同意,一個快速的解決方案,在那個時候,沒有多少時間:( – Sarfraz 2012-06-14 17:27:25

+0

偉大的解決方案,但有點粗略。用於LEMP堆棧,我無法重新加載nginx。用sudo tail/var/log調試後/nginx/error.log這些錯誤直接在這些行上,在刪除代碼後我能夠重新加載就好了 – d1sciple 2016-04-12 12:44:27

19
<select name="name"> 
    <option <?php if ($_GET['name'] == 'a') { ?>selected="true" <?php }; ?>value="a">a</option> 
    <option <?php if ($_GET['name'] == 'b') { ?>selected="true" <?php }; ?>value="b">b</option> 
</select> 
+0

是它的最好方法是什麼?我的表單中有太多選項。 – 3zzy 2010-02-11 17:29:34

+3

如果正在代碼中生成'option'標籤(如果它們不是,那麼爲什麼不呢?),您可以將檢查放在循環中。 – 2010-02-11 17:39:52

2

的js唯一的解決辦法:

var tmpParams = decodeURIComponent(window.location.search.substr(1)).split("&"); 
for (var i = 0; i < tmpParams.length; i++) { 
    var tmparr = tmpParams[i].split("="); 
    var tmp = document.getElementsByName(tmparr[0])[0]; 
    if (!!tmp){ 
     document.getElementsByName(tmparr[0])[0].value = tmparr[1]; 
    } 
} 

,或者如果你正在使用jQuery可以取代

var tmp = document.getElementsByName(tmparr[0])[0]; 
if (!!tmp){ 
    document.getElementsByName(tmparr[0])[0].value = tmparr[1]; 
} 

與:

$('*[name="'+tmparr[0]+'"]').val(tmparr[1]); 
3

由於WordPress的已經使用jQuery的你可以嘗試這樣的事:

var POST=<?php echo json_encode($_POST); ?>; 
for(k in POST){ 
    $("#"+k).val(POST[k]); 
} 
+0

使用這種類型的方法是否存在任何安全問題? – rnevius 2014-09-17 14:20:01

5

試圖人本 「解決了」 什麼下班後。在之前做過關於w3school的一些研究,並且記得有關於保持無線電價值的解釋。但它也適用於選擇選項。看到這裏的一個例子。試試看吧,玩吧。

<?php 
$example = $_POST["example"]; 
?> 
<form method="post">   
<select name="example"> 
    <option <?php if (isset($example) && $example=="a") echo "selected";?>>a</option> 
    <option <?php if (isset($example) && $example=="b") echo "selected";?>>b</option> 
    <option <?php if (isset($example) && $example=="c") echo "selected";?>>c</option> 
</select> 
<input type="submit" name="submit" value="submit" /> 
</form> 
-1
<form method="get" action=""> 
<select name="name" value="<?php echo $_GET['name'];?>"> 
    <option value="a">a</option> 
    <option value="b">b</option> 
</select> 
<select name="location" value="<?php echo $_GET['location'];?>"> 
    <option value="x">x</option> 
    <option value="y">y</option> 
</select> 
    <input type="submit" value="Submit" class="submit" /> 
</form> 
+0

這不你需要在你想要的選項上設置'selected'屬性 – 2017-05-06 17:55:02

3

如果您正在使用WordPress的(如與OP的情況下),你可以使用selected功能。

<form method="get" action=""> 
    <select name="name"> 
    <option value="a" <?php selected(isset($_POST['name']) ? $_POST['name'] : '', 'a'); ?>>a</option> 
    <option value="b" <?php selected(isset($_POST['name']) ? $_POST['name'] : '', 'b'); ?>>b</option> 
</select> 
<select name="location"> 
    <option value="x" <?php selected(isset($_POST['location']) ? $_POST['location'] : '', 'x'); ?>>x</option> 
    <option value="y" <?php selected(isset($_POST['location']) ? $_POST['location'] : '', 'y'); ?>>y</option> 
</select> 
<input type="submit" value="Submit" class="submit" /> 
</form> 
+0

這可能是OP問題的最佳答案,因爲他們使用的是Wordpress。 – 2017-05-06 17:43:46

0

這適用於我!

<label for="reason">Reason:</label> 
<select name="reason" size="1" id="name" > 
    <option value="NG" selected="SELECTED"><?php if (!(strcmp("NG", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>Selection a reason below</option> 
    <option value="General"<?php if (!(strcmp("General", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>>General Question</option> 
    <option value="Account"<?php if (!(strcmp("Account", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>>Account Question</option> 
    <option value="Other"<?php if (!(strcmp("Other", $_POST["reason"]))) {echo "selected=\"selected\"";} ?>>Other</option> 

</select> 
0

嘗試在下拉列表中該解決方案爲保持選定值:

<form action="<?php echo get_page_link(); ?>" method="post"> 
    <select name="<?php echo $field_key['key']; ?>" onchange="javascript: 
     submit()"> 
    <option value="">All Category</option> 
    <?php 
    foreach($field['choices'] as $key => $value){ 
     if($post_key==$key){ ?> 
      <option value="<?php echo $key; ?>" selected><?php echo $value; ?></option> 
<?php 
    }else{?> 
    <option value="<?php echo $key; ?>"><?php echo $value; ?></option> 
<?php } 
    }?> 
</select> 
</form>