0

这是我的片段 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>
4

3 回答 3

1

一个经典的错误,你需要在 ajax 函数中进行回调,因为当函数已经执行时,ajax post 还没有发出:

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
         }
    });
});

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

于 2012-11-07T20:49:40.030 回答
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密钥。

于 2012-11-07T20:52:02.720 回答
0

您应该关心数据类型。1 不等于“1”或“1”。是吗?!用于"typeof"找出值的数据类型。同样,仅通过返回值您无法继续该过程。这是一个异步调用。你应该读一下。

干杯

于 2012-11-07T20:49:07.043 回答