2012-11-07 6 views
0

내 스 니펫 jquery 코드는 다음과 같습니다. Pratically 나는 양식 제출시 필드가 비어 있는지 확인한 다음 사용자 이름이 존재하면 확인 대화 상자를 표시합니다.jquery 확인 필드 확인

<script type="text/javascript"> 
jQuery(function(){ 

    $("#form").submit(function(){ 
     var isFormValid = true; 
     if ($.trim($("#telephone").val()).length == 0){ 
      isFormValid = false; 
     alert("Empty telephone!"); 
     } 
    elseif(check_field() == 1){ 
      if(confirm('Delete?')){ 
     isFormValid = true; 
    }else{ 
     isFormValid = false; 
    } 
     return isFormValid; 
}); 

function check_field(){ 
    var field = $('#field').val(); 
    $.post("check_field.php", { field: field }, function(result){ 
     //if the result is 1 
     if(result == 1){ 
      return 1; 
     }else{ 
      return 0; 

     } 
    }); 
} 

}); 
</script> 

답변

0

데이터 유형에주의해야합니다. 1이 "1"또는 "1"과 같지 않습니다. 그렇지? 값의 데이터 유형을 찾으려면 "typeof"을 사용하십시오. 또한 단지 가치를 반환함으로써 당신은 그 과정을 계속할 수 없습니다. 비동기 호출입니다. 그것에 대해 읽어야합니다.

function check_field(callback){ 
    var field = $('#field').val(); 
    $.post("check_field.php", { field: field }, function(result){ 
     //if the result is true 
     callback(result == 1); 
    }); 
} 

그리고 뭔가 : 함수가 실행 된 경우, 아약스 포스트가 아직 이루어지지 않았기 때문에

건배

+1

그는 트리플 강제 연산자를 사용하여 유형 강제 변환을 피할 수도 있습니다. –

+0

Yeap. 맞습니다. 설명을 위해 – Rikki

1

고전적인 실수는, 당신은 아약스 함수에서 콜백을 만들 필요가 like :

$("#form").submit(function(e){ 
    e.preventDefault() // prevent the form from submitting... yet 
    var $form = $(this); 
    check_field(function(result) { 
     if(result && confirm('Delete?')) { 
      $form.submit(); // now submit it 
     } 
    }); 
}); 

비동기 프로그래밍의 세계에 오신 것을 환영합니다!

+0

Thk. 귀하의 코드와 함께 시도했지만이 오류가 발생했습니다 : TypeError : 콜백이 함수가 아닙니다. – Jimmy

+0

또한, check_field에 인수로 함수를 가져와야합니다. – David

+0

thk, 이제 작동합니다. 하지만 이제는 체크 필드가 비어있는 컨트롤을 추가해야합니다. 제 코드를 보여주세요. – Jimmy

1

$.post 호출은 비동기식입니다. 따라서 내부 반환 명령문은 실제로 check_field 함수 내부에서 돌아 오지 않습니다. 내부 함수는 일단 서버가 응답하면 호출됩니다.

기본적으로 원래 check_field 함수는 POST 요청을 발행 한 다음 서버가 응답 할 때까지 기다리지 않고 계속 진행하여 제어 흐름을 원래 전송 처리기로 반환합니다.

대신 수행해야하는 작업은 POST의 비동기 응답을 기다린 다음 반환 된 유효성 검사가 성공하면 제출을 트리거하는 것입니다.

A는 매우 간단하게 구현이이 같은 것을 볼 수 있었다 :

jQuery(function(){ 

    $("#form").on('submit', function(ev){ 
     ev.preventDefault(); 

     var $form = $(this), 
      field = $('#field').val(); 

     $.post("check_field.php", { field: field }, function(result){ 
      if (result==1 && confirm('Delete?')) 
       $form.off().submit(); 
     }); 
    }); 
}); 

참고 : 나는 코드를 업데이트 - 그것은 이제 submit 이벤트를 트리거, 그래서 모두가 제출 '버튼을 클릭 작동하고 enter 키를 사용하십시오.

+0

키보드를 통해 제출하는 것은 어떻습니까? 클릭 대신 양식 제출 이벤트를 바인딩하는 것이 더 좋습니다. – David

+0

내 코드를 업데이트했습니다. 너. – Jimmy

+0

@David : 물론 그렇긴하지만 제출자 핸들러를 다시 트리거하지 않게해야합니다. –