【问题标题】:Jquery validation messages from xml来自 xml 的 Jquery 验证消息
【发布时间】:2010-10-06 06:03:49
【问题描述】:

我正在使用 Jquery valdiation plugin 在客户端验证表单。 我正在从 xml 文件中获取验证错误消息。

$("#"+form).validate({
    errorLabelContainer: "#dialogError", //msg_error
    wrapper: "li",
    rules: {
        txtInfringementID: {
            required: true,
            digits: true
        },
        txtLicenceNumber: {
            required: true            
        },
        txtDateOfOffence: {
            date: true,
            required: true
        }
    },
    messages: {
        txtInfringementID: {
            required:this.errorMessage("InfringementID","Required"),
            digits: "Inf Id must be numeric only"
        },
        txtDateOfOffence: {
            required: "please enter date of offence",
            date: "Date is not valid"
        },
        txtLicenceNumber:this.errorMessage("LicenceNumber", "Required"),
        txtSurname: this.errorMessage("DebtorSurname", "Required")
    }
)};

errorMessage函数如下。

this.errorMessage = function (Field, Rule) {

    var message;
    $.ajax({
        type: "GET",
        url: "../../../ErrorMessages.xml",
        dataType: "xml",
        success: function (xml) {

            $(xml).find("*[Name='" + Field + "']").each(function () {
                message = $(this).find(Rule).text();
            });
        }
    });

    return message; **//I am using a debugger here**
}

我使用的xml是

<?xml version="1.0" encoding="utf-8" ?>
<ErrorMessage>
    <Field Name="InfringementID">
        <Required>Infringement ID is required</Required>
        <Digit>Infringement ID should be numeric only</Digit>
    </Field>
    <Field Name="LicenceNumber">
        <Required>License Number is Mandatory</Required>
    </Field>
    <Field Name="DebtorSurname">
        <Required>Debtor Surname is Mandatory</Required>
    </Field>
</ErrorMessage>

但问题是,当我使用调试器时,我会从 xml 获取消息。如果我不使用调试器,我会收到默认消息“此字段是必需的”。我认为,问题是this.errorMessage() 是一个异步请求,这个请求需要一些时间才能完成。我尝试使用 setTimeout 函数 延迟一些时间。但我不知道把时间延迟放在哪里。欢迎任何思考过程。

我是这样设置超时的。

required:setTimeout(this.errorMessage("InfringementID","Required"),10000),

【问题讨论】:

    标签: jquery xml validation asynchronous settimeout


    【解决方案1】:

    errorMessage 启动 ajax 调用,之后直接返回,无需等待响应。因为message 将一直是null。 您使用setTimeout 的方法只会延迟errorMessage 的调用。结果将与没有它相同。 使您的 ajax 调用同步,从而等待它的结果。

    $.ajax({
        type: "GET",
        async: false,     // wait for the response
        url: "../../../ErrorMessages.xml",
        dataType: "xml",
        success: function (xml) {
            $(xml).find("*[Name='" + Field + "']").each(function () {
                message = $(this).find(Rule).text();
            });
        }
    });
    

    编辑 我不完全知道你在问什么,但我会试一试...... 由于您上面问题的最后一行,也许以下部分会为您解决

    required: function() {
        setTimeout(this.errorMessage("InfringementID", "Required"), 10000);
    }
    

    【讨论】:

    • 谢谢,我回邮件的时候不能耽误点时间吗。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多