【问题标题】:jQuery Validator -- explicitly notify validator of element's valid state changejQuery Validator -- 显式通知验证器元素的有效状态变化
【发布时间】:2011-07-06 16:41:59
【问题描述】:

我有一个自定义验证器方法,它将根据我接受的邮政编码数据库检查输入的邮政编码。我想让这个请求异步。以下是它目前的样子:

jQuery.validator.addMethod("validZip", function(value, element){
    var isValid = false;
    $.ajax({
        url: '/xpress/wp-admin/admin-ajax.php',
        data: {action:"test_checkZip", zip:value},
        type:"POST",
        async: false,
        success: function(result){
            if (result == 0){
                isValid = false;
            } else {
                isValid = true;
            }
        } 
    });
    return isValid;
}, '*');

此请求要求它是同步的,因为它正在更新将由包装函数返回的变量。如果我要异步执行此操作,则请求将以非阻塞方式完成。该函数将执行请求,但它不会等待响应来更新它将返回的布尔值。它会在 ajax 完成之前返回默认的 false 值并将其更新为 true。

我需要明确地通知验证器一个事件已经改变,它需要重新验证控件。如何实现通知验证者的这种想法?

我需要这样做:

jQuery.validator.addMethod("validZip", function(value, element){
    $.ajax({
        url: '/xpress/wp-admin/admin-ajax.php',
        data: {action:"test_checkZip", zip:value},
        type:"POST",
        async: true,
        success: function(result){
            if (result == 0){
                notifyZipControl(false)
            } else {
                notifyZipControl(true)
            }
        } 
    });
}, '*');

function notifyZipControl(isValid){
    if (isValid){
        // update the validator so the control becomes VALID
    } else {
        // update the validator so the control becomes INVALID
    }
}

这个想法可以实现吗?

【问题讨论】:

    标签: javascript jquery ajax validation jquery-validate


    【解决方案1】:

    remote rule 绝对可以做到这一点:

    $("form").validate({
        rules: {
            zip: {
                remote: {
                    url: "/xpress/wp-admin/admin-ajax.php",
                    data: {
                        /* supply data besides the field value here: */
                        action: "test_checkZip"
                    }
                }
            }
        }
    });
    

    在幕后,验证只是使用$.ajax 调用,因此您应该能够提供所需的任何灵活性。

    这是一个(糟糕的)示例,它只是检查邮政编码是否为 5 个字符长(并没有真正以有意义的方式访问服务器,但希望它会给您一个好的起点):http://jsfiddle.net/HYLS4/

    【讨论】:

    • 谢谢安德鲁。我忘了更新这个答案我最终发现了这一点。不过谢谢你的回复!将此标记为已回答 +1
    • @Atticus:没问题!很高兴你明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多