양식을 제출할 때 제출하기 전에 양식을 제출하기 전에 유효성 확인을 수행하고 싶습니다. 꽤 똑바로 전 생각합니다. 그래서 폼에 제출 핸들러를 설정하고 AJAX 검사를 수행하기를 원했고, 완료되면 모든 것이 좋다면 평소대로 제출하십시오. jQuery : AJAX가 끝나면 양식을 제출하십시오.
나는 이것을 시도, 그것은 매우 분명한 이유 실패 : 어떤 문자를 해당 필드에있는 경우checkTitle
및
checkMessage
그냥 확인하는 동안
$.when(checkUsername()).done(function (a) {
checkTitle();
checkMessage();
if (userValid && titleValid && messageValid) {
return true;
}
});
return false;
checkUsername
가하는 $.post
입니다. 각 함수는 userValid
, titleValid
및 messageValid
의 유효성을 검사하여 해당 값을 true 또는 false로 설정합니다. 두 개의 입력 필드와 텍스트 영역 필드에는 각 관련 함수에 첨부 된 흐림 효과가 있으므로 사용자가 제출을 클릭하기 전에도 양식의 유효성이 검사됩니다.
마지막으로 false를 반환하면 양식이 제출되지 않습니다. 하지만, 원래는 유효한 체크가 아닌 곳에서 유효 체크가 이루어졌고 사용자가 3 개의 유효한 항목을 입력 한 다음 필드를 지우고/흐리게 표시하지 않고 직접 제출을 클릭하면 여전히 유효합니다. 왜냐하면 AJAX가 여전히 처리 중이기 때문에 현장은 두 번째 검사를받지 않았기 때문입니다.
기본적으로 양식은 AJAX가 완료 될 때까지 제출을 기다리고 싶습니다. 그러나 submit()
함수는 AJAX가 끝나기 전에 반환을 처리 할 것이고, 제출할 때 AJAX가 필요하기 때문에 done에 넣을 수는 없습니다. 본질적으로 잡아라.
나는 그것을하는 지저분한 방법이라고 느꼈다. 그러나 내가 지금 생각할 수있는 유일한 방법이다. 이것이 유일한 방법 인 경우 조언을 사용할 수있다. 그것을하거나, 내가 가지고있는 다른 선택 사항들. AJAX를 통해 양식을 제출할 수 있다는 것을 알고 있지만 어떤 옵션을 사용할 수 있는지 알고 싶습니다.
이때if (validated) return true;
else {
$form = $(this);
$.when(checkUsername()).done(function (a) {
checkTitle();
checkMessage();
if (userValid && titleValid && messageValid) {
validated = true;
$form.submit();
}
});
return false;
}
는 오직 AJAX 설정 마스터 유효성 변수가 있고, 완료되면 시스템이 다시 전송 :이 지저분 방법이다.