2012-11-07 53 views
0

这是我的代码片段jquery。实际上,我会检查提交表单上的字段是否为空,然后如果用户名存在,则显示确认对话框。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"来找出值的数据类型。也只是通过返回价值,你不能继续这个过程。这是一个异步调用。你应该读一读。

干杯

+1

他也可以使用triple-equals操作符来避免类型强制。 –

+0

Yeap。那就对了。 – Rikki

1

一个经典的错误,你需要做的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 
     } 
    }); 
}); 

欢迎来到异步编程的世界!

+0

Thk解释。我试着用你的代码,但收到了这个错误:TypeError:回调不是一个函数 – Jimmy

+0

看到我的补充,你需要把一个函数作为参数引入'check_field'。 – David

+0

thk,现在工作。但是现在我必须添加一个检查栏为空的控件。请显示我的代码。 – Jimmy

1

你的$.post调用是异步的 - 所以内部返回语句实际上并不从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键。

+0

如何通过键盘提交?我认为最好是绑定表单提交事件而不是点击。 – David

+0

我已更新我的代码。 THK。 – Jimmy

+0

@David:当然,但你需要确保你不会再次触发提交处理程序:)我会改变这个例子 –