2013-04-04 12 views
9

Ich benutze ein Jquery-Plugin -> AutoNumeric (http://www.decorplanit.com/plugin/) und wenn ich das Formular abschicken kann ich nicht die Formatierung auf den Feldern vor dem POST entfernen.autoNumeric.js entfernen Formatierung vor dem Senden des Formulars

Ich habe versucht, $('input').autonumeric('destroy') (und andere Methoden) zu verwenden, aber es bleibt die Formatierung auf den Textfeldern.

Wie kann ich die unformatierten Daten auf dem Server veröffentlichen? Wie kann ich die Formatierung entfernen? Gibt es ein Attribut dafür in der ersten Konfiguration oder woanders?

--edit Ich möchte die serialisierten Formulardaten nicht an den Server (mit Ajax) senden. Ich möchte das Formular mit den unformatierten Daten wie eine normale HTML-Aktion senden.

Antwort

12

Ich schrieb einen besser, etwas allgemeinere Hack für diese in jQuery

$('form').submit(function(){ 
    var form = $(this); 
    $('input').each(function(i){ 
     var self = $(this); 
     try{ 
      var v = self.autoNumeric('get'); 
      self.autoNumeric('destroy'); 
      self.val(v); 
     }catch(err){ 
      console.log("Not an autonumeric field: " + self.attr("name")); 
     } 
    }); 
    return true; 
}); 

Dieser Code Form w/Fehler reinigt auf nicht autoNumeric Werte Handhabung.

+0

schön, aber für eine Sekunde oder zwei (während Formular übermittelt) sehe ich den unformatierten Wert. Es ist nur ein kosmetisches Problem, aber es ist wenig nervig. – Adrian

+1

Dies ist nicht mehr notwendig, Sie können jetzt einfach die folgende Option verwenden: '{unformatOnSubmit: true}' – Alex

1

Verwenden Sie die get Methode.

'get' | gibt das nicht formatierte Objekt über ".val()" oder ".text()" | zurück $ (Selektor) .autoNumeric ('get');


<script type="text/javascript"> 
    function clean(form) { 
     form["my_field"].value = "15"; 
    } 
</script> 

<form method="post" action="submit.php" onsubmit="clean(this)"> 
    <input type="text" name="my_field"> 
</form> 

Das wird immer "15" einreichen. Jetzt kreativ :)


Mirrored Rohwert:

<form method="post" action="submit.php"> 
    <input type="text" name="my_field_formatted" id="my_field_formatted"> 
    <input type="hidden" name="my_field" id="my_field_raw"> 
</form> 

<script type="text/javascript"> 
    $("#my_field_formatted").change(function() { 
     $("#my_field").val($("#my_field_formatted").autoNumeric("get")); 
    }); 
</script> 

Die in submit.php den Wert für my_field_formatted ignorieren und verwenden my_field statt.

+0

Methode get gibt den Wert des Eingabefelds zurück. Ich muss das unformatierte Formular einreichen. Ich möchte den unformatierten Wert für ein Feld nicht erhalten. – zeal

+0

Dann "holen" Sie den Wert und senden das? Ich gehe davon aus, dass Sie einen benutzerdefinierten On-Submit-Handler haben, falls nicht, machen Sie einen, Sie werden es brauchen. – Halcyon

+0

so ist es nicht möglich, die unformatierten Daten ohne Ajax-Anfrage zu übermitteln? – zeal

1

Sie können immer php str_replace Funktion

str_repalce(',','',$stringYouWantToFix); 

es entfernen Sie alle Kommas verwenden. Sie können den Wert bei Bedarf in Ganzzahl umwandeln.

+0

Warum php? (fyi Ich habe Java auf der Server-Seite für die App verwendet.) falsche Lösung, keine Antwort. – zeal

+0

Das ist egal. Java hat wahrscheinlich Methoden mit ähnlicher Funktionalität. Ich sehe es als eine Lösung, weil es die Formatierung entfernt und das wollen wir wollen. Warum ist es wichtig, es Client-Seite zu tun? – Reza

+1

weil es in einer vielschichtigen Anwendung viel sauberer ist. gelesen, d. h. http://en.wikipedia.org/wiki/Loose_coupling für die Idee. – zeal

2

Innen Daten Rückruf Sie getString Methode wie unten rufen müssen:

 $("#form").autosave({ 
     callbacks: { 
      data: function (options, $inputs, formData) { 

       return $("#form").autoNumeric("getString"); 
      }, 
      trigger: { 
       method: "interval", 
       options: { 
        interval: 300000 
       } 
      }, 
      save: { 
       method: "ajax", 
       options: { 
        type: "POST", 
        url: '/Action', 
        success: function (data) { 

        } 
       } 
      } 
     } 
    }); 
0
$("input.classname").autoNumeric('init',{your_options}); 
$('form').submit(function(){ 
    var form=$(this); 
    $('form').find('input.classname').each(function(){ 
     var self=$(this); 
     var v = self.autoNumeric('get'); 
     // self.autoNumeric('destroy'); 
     self.val(v); 
    }); 
}); 

classname ist Ihre Eingangsklasse, die als autoNumeric Sorry für schlechtes Englisch^_^

0

init wird es ist eine andere Lösung für die Integration, die nicht mit Ihrer clientseitigen Validierung interferiert noch den Flash unformatierten Textes vor der Übermittlung verursacht:

var input = $(selector); 
var proxy = document.createElement('input'); 
proxy.type = 'text'; 
input.parent().prepend(proxy); 
proxy = $(proxy); 
proxy.autoNumeric('init', options); 
proxy.autoNumeric('set', input.val())'' 
proxy.change(function() { 
    input.val(proxy.autoNumeric('get')); 
}); 
Verwandte Themen