2009-11-02 7 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; 
    }); 
}); 

그래서 내가 도메인 이름을 인코딩 및 JSON 배열을 반환 idna.php하는 쿼리를 보내고있다 :

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

문제는 양식이 'original'값과 함께 제출되고 있습니다. 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

+0

$ ("selector")와 바인딩하지 않는 이유 live ("click", function() {}); ? 언제나 더 나은 방법을 찾아 냈습니다. – Sam

+0

'live'를 사용하는 것이 좋습니다라고 생각하지 않습니다. 제출 버튼이 바뀌면 실제로 필요합니다. (질문에 따라 볼 수는 없습니다) – karim79