这是我的代码片段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)
一个经典的错误,你需要在ajax函数中进行回调,因为在执行该函数时,尚未创建ajax帖子:
function check_field(callback){
var field = $('#field').val();
$.post("check_field.php", { field: field }, function(result){
//if the result is true
callback(result == 1);
});
}
然后像:
$("#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
}
});
});
欢迎来到异步编程世界!
答案 1 :(得分:1)
您的$.post
调用是异步的 - 因此内部return语句实际上并不从check_field
函数内部返回。一旦服务器响应,就会调用内部函数。
基本上,原始check_field
函数发出POST请求,然后继续,而不等待服务器响应,将控制流返回到原始提交处理程序。
您需要做的是等待来自POST的异步响应,然后在返回的验证成功时触发提交。
一个非常简单的实现可能看起来像这样:
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
键。
答案 2 :(得分:0)
您应该关心数据类型。 1不等于“1”或“1”。是吗?!使用"typeof"
查找值的数据类型。也只是通过返回值,您无法继续该过程。这是一个异步调用。你应该读一下。
干杯