2009-11-02 18 views
5

Muszę zakodować nazwę domeny (IDNA) dla konkretnego rejestratora za pomocą akcentów.Zmiana pola wejściowego przed przesłaniem

Mam proste pole wejściowe:

<input type="text" id="idndomain" name="sld[0]" size="40" /> 

Moja funkcja jQuery

$(document).ready(function() { 
    $('#domainform').submit(function(){ 
     $.getJSON("includes/idna/idna.php", { 
      domain: $("input#idndomain").val() 
     }, function(data){ 
      $("div#result").html($('<b>' + data.encoded + '</b>')); 
      $('#idndomain').val(data.encoded); 
     }); 
     return true; 
    }); 
}); 

więc przesyłam zapytanie do idna.php który koduje nazwę domeny i zwraca tablicę json:

{"encoded":"xn--caf-dma.ch"} 

Problem polega na tym, że formularz jest przesyłany z "oryginalną" wartością, a nie z wartości zwróconej przez b y zapytanie json.

Pytanie brzmi: jak najpierw "czekać" na wynik json, zastąpić pole wejściowe zakodowanym łańcuchem, a następnie przesłać?

Odpowiedz

7

Spróbuj wiążące przycisku złożyć zamiast postaci i wyraźnie powołać postaci za submit obsługi w Zaproszeniu JSON sukcesie callback:

$(document).ready(function() { 
      $('#submitButton').click(function(){ 

        // maybe disable the submit button once clicked? 
        $(this).attr('disabled', true); 
        $.getJSON("includes/idna/idna.php", { 
          domain: $("input#idndomain").val() 
        }, function(data){ 
          $("div#result").html($('<b>' + data.encoded + '</b>')); 
          $('#idndomain').val(data.encoded); 
          // now submit the form 
          $('#domainform').submit(); 
        }); 
        return false; 
      }); 
    }); 
+1

Koniecznie pozwalają na więcej niż jednym kliknięciem, niektórzy ludzie mogą złożyć formularz z powrotem lub kartę> spacja/karta> powrót. – dylanfm

+0

dlaczego nie wiązać z $ ("selektor"). Na żywo ("kliknij", funkcja() {}); ? Zawsze znajdowałem to lepiej na wszelki wypadek :) – Sam

+0

Nie sądzę, że jest wystarczająco dużo kontekstu, aby polecić użycie 'live', jest to naprawdę potrzebne tylko wtedy, gdy przycisk" submit "zostanie zastąpiony (co nie może się wydarzyć w oparciu o to pytanie). – karim79

Powiązane problemy