Ver Mensaje Individual
  #8 (permalink)  
Antiguo 04/05/2010, 16:32
Dany_s
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Convirtiendo campos de form en valores

Pasa que hay que usar arrays porque en un loop se va a sobreescribir el nombre y el valor cuando exista varios valores seleccionados en un select multiple o en un casillas de verificación.

Es bastante lioso pero aca va algo

Código HTML:
<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>

<form>
    <select name="single">
      <option>Single</option>
      <option>Single2</option>
    </select>

<br />
    <select name="multiple" multiple="multiple">
      <option selected="selected">Multiple</option>
      <option>Multiple2</option>

      <option selected="selected">Multiple3</option>
    </select>
<br/>
    <input type="checkbox" name="check" value="check1" id="ch1"/>

    <label for="ch1">check1</label>

    <input type="checkbox" name="check" value="check2" checked="checked" id="ch2"/>

    <label for="ch2">check2</label>
<br />
    <input type="radio" name="radio" value="radio1" checked="checked" id="r1"/>

    <label for="r1">radio1</label>
    <input type="radio" name="radio" value="radio2" id="r2"/>

    <label for="r2">radio2</label>
    <input type="text" name="miInput" value="el valor del input name=miInput">
    <input type="submit" value="Mostrar">
  </form>
  <p><tt id="results"></tt></p>
<script>
    var valores;
    $('form').submit( function (){
        valores = new Array; //En este array se va a crear indices con los nombres de los campos
        var str = $(this).serialize(); //Obtengo todos los campos y valores del formulario
        str = str.split('&');//Corto por el ampersand para que quede name=value
        //recorro str
        jQuery.each(str, function (v, k){
            k = k.split('='); //en cada valor corto por  el signo igual, en el indice 0 tengo el nombre del campo, en el indice 1 el valor del campo, enconces guardo en un array
            //Compruebo si ya se ha definido el array (para que no sobreescriba los select multiple o lo checkbox)
            if(valores[k[0]] == undefined){ //Para que no me sobreescriba en los select multiples o checkbox
                valores[k[0]] = new Array;
            }
            //agrego los valores
            valores[k[0]].push(k[1]);
        });
        
        mostrarName('multiple');//paso el nombre del campo como parámetro
        return false;
    });

    function mostrarName(name){
        //muestro el o los valor del input name=multiple pasado como parámetro (puede haber varios chekeados)
        for (i = 0; i < valores[name].length; i++){
            alert(valores[name][i]);
        }
    }

</script>
</body>
</html>