2010-07-14 5 views
73

que tiene una etiqueta de selección con algunas opciones en un formulario HTML:
(los datos serán recogidos y procesados ​​usando PHP)¿Puede una Opción en una etiqueta Seleccionar transportar valores múltiples?

Pruebas:

<SELECT NAME="Testing"> 
    <OPTION VALUE="1"> One 
    <OPTION VALUE="2"> Two 
    <OPTION VALUE="3"> Three 
</SELECT> 

¿Es posible que una opción para transportar múltiples valores como cuando un usuario selecciona "Uno", luego algunos otros valores relacionados con esta opción se escribirán en la Base de datos.

¿Cómo debo diseñar la etiqueta SELECT de manera que cada una de las opciones puede llevar uno de un valor de la siguiente manera:

<SELECT NAME="Testing"> 
    <OPTION VALUE="1" value="2010"> One 
    <OPTION VALUE="2" value="2122"> Two 
    <OPTION VALUE="3" value="0"> Three 
</SELECT> 
+0

está usando PHP como script de servidor para su procesamiento –

+1

solo curiosidad por qué necesita esto? – Salil

+2

@Salil. Por curiosidad, si es posible hacerlo – user327712

Respuesta

105

Una forma de hacer esto, primero una matriz, segundo un objeto:

<select name=""> 
     <option value="{'num_sequence':[0,1,2,3]}">Option one</option> 
     <option value="{'foo':'bar','one':'two'}">Option two</option> 
    </select> 

Editado (3 años después de contestar) para poner los dos valores en formato JSON (usando JSON.stringify()) a causa de una queja que mi prueba- respuesta de concepto "podría confundir a un desarrollador novato".

+5

+1 para una solución elegante. nótese bien Si usa la opción dos, entonces le recomiendo que use $ .parseJSON ($ (this) .val()) en el evento change para obtener un objeto javascript, suponiendo que necesita obtener cada valor por separado. –

+1

-1 porque esta respuesta induce al OP a tener un gran problema de seguridad en su código mientras evalúa la entrada. La mejor manera de evitar esto es usar JSON, como lo sugiere @DavidHoerster, porque la entrada se comporta mejor. – fotanus

+4

@fotanus: Mi segundo ejemplo * es * un objeto JSON literal no diferente de lo que la otra pregunta propone. En cuanto a la matriz, es solo un ejemplo. Es responsabilidad del código del lado del servidor desinfectar los valores de entrada de todos modos. – Robusto

14

una opción es poner en valor múltiples con una coma seperated

como

value ="123,1234" 

y en el lado del servidor separará

+0

cómo separarlos en el lado del servidor? (en php) –

+0

como la función explotar –

+0

gracias. Está funcionando –

0

Los parámetros de etiquetas duplicadas no están permitidos en HTML. Lo que podrías hacer es VALUE="1,2010". Pero tendría que analizar el valor en el servidor.

3

Si su objetivo es escribir esta información en la base de datos, ¿por qué necesita tener un valor primario y valores 'relacionados' en el atributo value? ¿Por qué no simplemente enviar el valor primario a la base de datos y dejar que la naturaleza relacional de la base de datos se encargue del resto?

Si es necesario tener varios valores en sus OPTION s, probar un delimitador que no es muy común:

<OPTION VALUE="1|2010">One</OPTION> 

...

o añadir un objeto literal (formato JSON):

<OPTION VALUE="{'primary':'1','secondary':'2010'}">One</OPTION> 

...

que realmente depende de lo que estamos tratando que hacer.

3

valores puestos a cada uno opciones como

<SELECT NAME="val"> 
    <OPTION VALUE="1" value="1:2:3:4"> 1-4 
    <OPTION VALUE="2" value="5:6:7:8"> 5-8 
    <OPTION VALUE="3" value="9:10:11:12"> 9-12 
</SELECT> 

del lado del servidor en caso de php, funciones de uso como explotan [matriz] = explotar ([delimitador], [valor publicado]);

$values = explode(':',$_POST['val'] 

el código anterior devolver una matriz tiene sólo los números y el ':' se eliminan

38

realidad estaba preguntando esto hoy, y yo conseguido utilizando el php función de explotar, así:

formulario HTML (en un archivo que he nombrado 'doublevalue.php':

<form name="car_form" method="post" action="doublevalue_action.php"> 
      <select name="car" id="car"> 
        <option value="">Select Car</option> 
        <option value="BMW|Red">Red BMW</option> 
        <option value="Mercedes|Black">Black Mercedes</option> 
      </select> 
      <input type="submit" name="submit" id="submit" value="submit"> 
    </form> 

acción PHP (en un archivo que nombré doublevalue_action.php)

<?php 
      $result = $_POST['car']; 
      $result_explode = explode('|', $result); 
      echo "Model: ". $result_explode[0]."<br />"; 
      echo "Colour: ". $result_explode[1]."<br />"; 
    ?> 

Como puede ver en la primera parte del código, estamos creando un cuadro de selección HTML estándar, con 2 opciones. Cada opción tiene 1 valor, que tiene un separador (en este caso, '|') para dividir los valores (en este caso, modelo y color).

En la página de acción, exploto los resultados en una matriz, y luego llamo a cada uno. Como puede ver, los he separado y etiquetado para que pueda ver el efecto que esto está causando.

espero que esto ayude a alguien :)

+1

Encuentro este método muy simple y muy útil, pero me pregunto si este método es compatible con todos los navegadores? –

+0

se ve muy simple y eficiente. Gracias –

+0

Brillante, Increíble, Excelente ... joya de una clase – user3370889

9

Cuando necesito hacer esto, yo Maquillaje valores de datos de los otros valores y luego usar JS para asignarlos a un campo oculto

<select id=select> 
<option value=1 data-othervalue=2 data-someothervalue=3> 
//... 
</select> 

<input type=hidden name=otherValue id=otherValue /> 
<input type=hidden name=someOtherValue id=someOtherValue /> 

<script> 
$('#select').change(function() { 
var otherValue=$(this).find('option:selected').attr('data-othervalue'); 
var someOtherValue=$(this).find('option:selected').attr('data-someothervalue'); 
$('#otherValue').val(otherValue); 
$('#someOtherValue').val(someOtherValue); 
}); 
</script> 
+1

Esto me ayudó a obtener parte del camino, también puede usar .data() para volver a salir si ya tiene un elemento (vs doing una consulta de selector). p.ej. myElem.data ('othervalue') – jsh

+1

Esto no es técnicamente lo que OP pide, pero es 100% lo que estaba tratando de lograr cuando vine a buscar aquí. +1 por el camino más simple y mejor para lo que supongo que era el objetivo final de simplemente almacenar dos datos en una opción de selección. – Lime

-2

que pueda utilizar múltiples atributos

<SELECT NAME="Testing" multiple> 
<OPTION VALUE="1"> One 
<OPTION VALUE="2"> Two 
<OPTION VALUE="3"> Three 

+0

Quiere múltiples bits de información de una selección, no de múltiples selecciones. – Barmar

6

su posible tener varios valores en una seleccione la opción como se muestra a continuación.

<select id="ddlEmployee" class="form-control"> 
    <option value="">-- Select --</option> 
    <option value="1" data-city="Washington" data-doj="20-06-2011">John</option> 
    <option value="2" data-city="California" data-doj="10-05-2015">Clif</option> 
    <option value="3" data-city="Delhi" data-doj="01-01-2008">Alexander</option> 
</select> 

puede obtener el valor seleccionado en el evento de cambio usando jquery como se muestra a continuación.

$("#ddlEmployee").change(function() { 
    alert($(this).find(':selected').data('city')); 
}); 

Puede encontrar más detalles en este LINK

0

Hice esto mediante el uso de atributos de datos. Es mucho más limpio que otros métodos tratando de hacer estallar etc.

HTML

<select class="example"> 
    <option value="1" data-value="A">One</option> 
    <option value="2" data-value="B">Two</option> 
    <option value="3" data-value="C">Three</option> 
    <option value="4" data-value="D">Four</option> 
</select> 

JS

$('select.example').change(function() { 

    var other_val = $('select.example option[value="' + $(this).val() + '"]').data('value'); 

    console.log(other_val); 

}); 
0

En lugar de almacenar las opciones en el lado del cliente, otra manera de hacer esto es almacene las opciones como elementos de sub-matriz de una matriz asociativa/indexada en el lado del servidor. Los valores de la etiqueta de selección simplemente contendrían las claves utilizadas para eliminar la referencia de la sub-matriz.

Aquí hay algunos ejemplos de código. Esto está escrito en PHP ya que el OP mencionado PHP, pero se puede adaptar a cualquier lenguaje de servidor que está utilizando:

<FORM action="" method="POST"> 
    <SELECT NAME="Testing"> 
     <OPTION VALUE="1"> One </OPTION> 
     <OPTION VALUE="2"> Two </OPTION> 
     <OPTION VALUE="3"> Three </OPTION> 
    </SELECT> 
</FORM> 

PHP:

<?php 
$options = array(
    1 => array('value1' => '1', 'value2' => '2010'), 
    2 => array('value1' => '2', 'value2' => '2122'), 
    3 => array('value1' => '3', 'value2' => '0'), 
); 
echo 'Selected option value 1: ' . $options[$_POST['Testing']]['value1'] . '<br>'; 
echo 'Selected option value 2: ' . $options[$_POST['Testing']]['value2'] . '<br>'; 
Cuestiones relacionadas