2010-02-11 21 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> 

All'invio del modulo, come faccio a verificare che i valori selezionati rimangano selezionati nei menu a discesa? Questo modulo è all'interno di wordpress (PHP).Mantenere i valori selezionati dopo l'invio del modulo

risposta

33

Per evitare molte strutture if-else, facciamo javascript fare il trucco automaticamente:

<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

Strange solution IMO- Introdurre javascript per salvare un paio di linee di PHP non ha senso. – Yarin

+0

@Yarin: concordato, una soluzione rapida, in ufficio da quel momento, non molto tempo :( – Sarfraz

+0

ottima soluzione ma di tipo abbozzato, usato sullo stack LEMP e non ero in grado di ricaricare nginx dopo il debugging con sudo tail/var/log /nginx/error.log gli errori erano direttamente su queste righe e dopo aver rimosso il codice sono stato in grado di ricaricare semplicemente – d1sciple

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

E 'il metodo migliore? Ci sono troppe opzioni nella mia forma. – 3zzy

+3

Se i tag 'option' vengono generati nel codice (e se non lo sono, allora perché no?) Puoi semplicemente inserire il controllo all'interno del ciclo. –

2

Js unica soluzione:

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]; 
    } 
} 

o se si sta utilizzando jQuery è possibile sostituire

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

con:

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

Dal wordpress già utilizza jQuery si può provare qualcosa di simile:

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

Ci sono problemi di sicurezza con l'utilizzo di questo tipo di metodo? – rnevius

5

Dopo aver provato al presente "risolve" il lavoro nulla. Prima ho fatto qualche ricerca su w3school e ricordo che c'era una spiegazione per mantenere i valori sulla radio. Ma funziona anche per l'opzione Seleziona. Vedi qui un esempio. Provalo e gioca con esso.

<?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

Questo non È necessario impostare l'attributo 'selected' sull'opzione desiderata. –

3

Se si utilizza Wordpress (come è il caso con l'OP), è possibile utilizzare la funzione 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

Questa è probabilmente la migliore risposta per la domanda dell'OP dal momento che sta usando Wordpress. –

0

Questo funziona per me!

<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

Prova questa soluzione per mantenere il valore selezionato nel menu a discesa:

<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> 
Problemi correlati