2009-11-02 46 views
5

我必須使用重音符號爲特定註冊商編碼域名(IDNA)。在提交之前更改輸入字段

我有一個簡單的輸入框:

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

我的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; 
    }); 
}); 

,所以我將查詢發送idna.php編碼的域名,並返回一個JSON數組:

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

問題是表單正在用'原始'值取代,而不是返回的值b y的json查詢。

問題是:如何首先等待json結果,用編碼後的字符串替換輸入字段,然後提交?

回答

7

嘗試綁定到提交按鈕,而不是形式,並明確調用JSON呼叫的成功回調中窗體的submit處理程序:

$(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

一定要允許不僅僅是一個點擊更多,有些人可能會提交一個帶有return或tab> space/tab> return的表單。 – dylanfm 2009-11-02 11:16:36

+0

爲什麼不綁定到$(「selector」)。live(「click」,function(){}); ? 總是發現它更好,只是以防萬一:) – Sam 2009-11-02 11:18:36

+0

我不認爲有足夠的上下文來推薦使用'live',它只有當提交按鈕被替換時才需要(我不能根據問題看到發生) – karim79 2009-11-02 11:21:36

相關問題