2011-10-22 18 views
6

mam ten kod:dziwne zachowanie - serializacji

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); 

teraz, kiedy zrobiłem:

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

Na przykład, jeśli mam wybrać wartość 1/8 wysłaniem go jako 1, lub 9/1 jako 16.

co chcę wysłać wartości frakcji, która jest wykazana w polu tekstowym, ale jak powiedziałem, nie wysłany do insert.php

Jakiś pomysł? dzięki

+0

spróbuj 'rozmiary var = [ "1 \/9", "1 \/8", "1 \/7"];' – Rafay

+3

@ 3nigma: Nie, że zrobić to rozwiąże problem. '/' zwykle nie musi być unikany. Z opisu OP, jeśli "1/8" jest wysyłany jako 1, a "9/1" jako 16, brzmi dla mnie, że zamiast tego wysłany zostanie indeks tablicy. – darioo

+0

@darioo masz rację, nie przeczytałem '9/1' jako 16 części ... – Rafay

Odpowiedz

3

Na początku podczas inicjacji suwaka zostanie utworzony <input type="hidden" name="input0" ... />.
Po użyciu suwaka ten input otrzymuje bieżącą wartość suwaka (liczba między 0 i sizes.length - 1). onChange ustawia inny znacznik wejściowy html z wartością z tablicy o nazwie sizes.
Podczas przesyłania serializeArray() przyjmuje wartości wszystkich pól wejściowych, które mają atrybut name.
W moim EXAMPLE podałem pole wejściowe, które zostanie wypełnione przy użyciu atrybutu onChange a name, więc serializacja przyjmuje obie wartości.

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

dzięki scessor. Naprawdę dobre wyjaśnienie. –