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

Al enviar el formulario, ¿cómo me aseguro de que los valores seleccionados permanezcan seleccionados en los menús desplegables? Esta forma está dentro de wordpress (PHP).Mantener los valores seleccionados después del envío del formulario

Respuesta

33

Para evitar muchas estructuras si-si no, vamos a javascript hace el truco de forma automática:

<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

Extraña solución IMO: Introducir javascript para guardar un par de líneas de PHP no tiene sentido. – Yarin

+0

@Yarin: De acuerdo, una solución rápida, en la oficina en ese momento, no mucho tiempo :( – Sarfraz

+0

gran solución pero algo incompleto. Se usa en la pila LEMP y no pude volver a cargar nginx después de depurar con sudo tail/var/log /nginx/error.log los errores estaban directamente en estas líneas y después de eliminar el código pude volver a cargarlo bien – 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

¿Es el mejor método? Hay muchas opciones en mi forma. – 3zzy

+3

Si las etiquetas 'option' se están generando en código (y si no lo están, ¿por qué no?) Simplemente puede colocar la verificación dentro del ciclo. –

2

única Js solución:

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 si está utilizando jQuery puede reemplazar

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

Desde wordpress ya utiliza jQuery se puede intentar algo como esto:

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

¿Existen problemas de seguridad con el uso de este tipo de método? – rnevius

5

Después de probar al este "resuelve" nada de trabajo. Hice algunas investigaciones sobre w3school antes y recuerdo que hubo una explicación sobre cómo mantener los valores de la radio. Pero también funciona para la opción Seleccionar. Vea aquí un ejemplo. Solo pruébalo y juega con eso.

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

Esto no significa trabajo. Necesita establecer el atributo 'selected' en la opción que desea seleccionar. –

3

Si está utilizando Wordpress (como es el caso de la OP), puede utilizar la función 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

Esta es probablemente la mejor respuesta para la pregunta del OP ya que están usando Wordpress. –

0

Esto funciona para mí!

<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

Pruebe esta solución para mantener el valor seleccionado en el menú desplegable:

<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> 
Cuestiones relacionadas