2011-10-22 24 views
6

tengo este código:extraño comportamiento - serializar

var sizes = ["1/9","1/8","1/7","1/6","1/5","1/4","1/3","1/2","1/1","2/1","3/1","4/1","5/1","6/1","7/1","8/1","9/1"]; 

      var slider = new dijit.form.HorizontalSlider({ 
       value:8, 
       name:"value"+[i], 
       slideDuration:0, 
       onChange:function(val){ 
        dojo.byId('value'+[i]).value = sizes[val]; 
        }, 
       minimum:0, 
       maximum:sizes.length-1, 
       discreteValues:sizes.length, 
       intermediateChanges:"true", 
      },node); 

ahora, cuando hice:

$("#custom").submit(function() { 
     var formdata = $("#custom").serializeArray(); 
     $.ajax({ 
      url: "insert.php", 
      type: "post", 
      dataType: "json", 
      data: formdata, 
      success: function(data) { 
} 
}); 

Por ejemplo, si opto por el valor 1/8 se envía como 1, o 9/1 16.

como

lo que quiero es enviar el valor de la fracción, que se muestra en el cuadro de entrada, pero como ya he dicho, no se envía al insert.php

¿Alguna idea? gracias

+0

tratar 'tamaños var = [ "1 \/9", "1 \/8", "1 \/7"];' – Rafay

+3

@ 3nigma: no que hacen eso resolverá el problema. '/' no suele ser escapado. De la descripción de OP, si "1/8" se envía como 1 y "9/1" como 16, me parece que en su lugar se envía el índice de la matriz. – darioo

+0

@darioo tienes razón, no leí el '9/1' como 16 parte ... – Rafay

Respuesta

3

Al comienzo durante el inicio del control deslizante se creará un <input type="hidden" name="input0" ... />.
Después de usar el control deslizante, este input obtiene el valor actual del control deslizante (un número entre 0 y sizes.length - 1). El onChange establece otra etiqueta de entrada html con el valor de la matriz llamada sizes.
Al enviar serializeArray() toma los valores de todos los campos de entrada que tienen un atributo name.
En mi EXAMPLE di el campo de entrada que se completará en el atributo onChange a name, por lo que la serialización toma ambos valores.

HTML:

<form action="#" id="custom"> 
    <div id="slider0"></div> 
    <input type="text" id="value0" data-dojo-type="dijit.form.TextBox" name="value0" /> 
    <input type="submit" value="submit" /> 
</form> 
+1

gracias scessor. Muy buena explicación. –