JQuery 验证插件:远程方法数据问题

Mat*_*att 3 validation jquery plugins

我正在使用 jquery 验证控制远程方法来测试电子邮件地址是否已存在于数据库中。第一次验证触发时一切正常。但是,在后续验证中,传递给 Web 服务的数据是旧数据,而不是输入到文本框中的新数据。

例如,在电子邮件文本框中输入电子邮件地址,验证触发,结果如预期。电子邮件地址已更改,验证再次触发,但在检查 FireBug 时,ajax 数据是旧数据而不是新数据。

因此,无论文本框中的内容如何,​​始终会传递以下数据。{'email':'test@test.com'}

例如,这些是规则设置。

rules: {
        <%=txtGuestEmail.UniqueID%>: {
            email: true,
            remote: {
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                cache: false,
                async: false,
                url: 'ajaxCheckout1.asmx/IsEmailAvailable',
                // Use data filter to strip .d explained here http://encosia.com/2009/06/29/never-worry-about-asp-net-ajaxs-d-again/
                dataFilter: function(data) {
                    var msg = eval('(' + data + ')');
                    // If the response has a ".d" top-level property, return what's below that instead.
                    if (msg.hasOwnProperty('d'))
                        return msg.d;
                    else
                        return msg;
                },
                dataType: 'json',
                data: "{'email':'" + $('#ctl00_PageContent_txtGuestEmail').val() + "'}"
            }
        },
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 5

发生这种情况的原因是电子邮件字段的值在页面加载时被捕获并且不再刷新。一种解决方案是将远程规则单独添加到此字段:

$('#myform').validate(
{
    ...
});

$('#ctl00_PageContent_txtGuestEmail').rules('add', {
    remote: function () {
        return {
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: 'ajaxCheckout1.asmx/IsEmailAvailable',
            dataFilter: function(data) {
                var msg = eval('(' + data + ')');
                if (msg.hasOwnProperty('d'))
                    return msg.d;
                else
                    return msg;
            },
            dataType: 'json',
            data: "{'email':'" + $('#ctl00_PageContent_txtGuestEmail').val() + "'}"
        };
    }
});
Run Code Online (Sandbox Code Playgroud)