0

我正在尝试使用远程验证服务器上是否已存在字符串jqueryvalidation.org plugin.

这是我的 jQuery 代码:

$("#title").rules("add", {
    "remote": {
        url: checkTitleAvailable.php,    // echoes "true" or "false"
        type: "post",
        data: {
            proposedSeoTitle:function() {
                return $('#title').val();
            }
        },
        complete: function(response) {
            if (response.responseText != "true" && response.responseText != "false") {
                alert("unexpected response " + response.responseText);
            }
            return response;
        }
    },
    "messages": {"remote": "That title already exists"}
});

('title' 是一个 id="title" class="required" 的输入字段)

我收到一个错误:

“未捕获的类型错误:无法调用未定义的方法‘调用’”。

"messages"被视为另一条规则,但没有要运行的函数。然而,它仍然被视为一条消息,并且往往会在应该弹出的时候弹出,但是该错误使整个系统无法使用 - 在保存之前无法验证整个页面。

我做错了什么,还是验证插件中的错误?有一些解决方法吗?我应该寻求破解插件以使其正常工作吗?

4

1 回答 1

1

引用操作:

'title' 是一个输入字段id="title" class="required"

即使您使用该.rules('add')方法在字段上声明您的规则,插件仍然要求每个输入字段都有一个(唯一的name属性。这就是插件跟踪输入的方式。

请参阅参考文档页面的标记建议部分...

name 属性对于输入元素是“必需的”,没有它验证插件将无法工作。


你的代码:

"remote": {
    url: checkTitleAvailable.php,    // echoes "true" or "false"
    type: "post",
    data: {
        proposedSeoTitle:function() {
            return $('#title').val();
        }
    },
    complete: function(response) {
        if (response.responseText != "true" && response.responseText != "false") {
            alert("unexpected response " + response.responseText);
        }
        return response;
    }
}

我不太确定你想用complete这里的回调做什么。插件的remote规则会自动评估来自服务器的响应,但您也在评估响应是否为布尔值并返回响应。

根据文档,该remote方法正在寻找true经过验证的字段。或者,当服务器响应是falseundefinednull或字符串时,它会被评估为无效字段,其中字符串本身会覆盖默认错误消息。鉴于插件已经评估了服务器响应,您永远不需要使用complete回调手动评估响应。remote否则,您不妨从头开始编写自己的方法,而不是使用插件中的方法。

服务器端资源通过 jQuery.ajax (XMLHttpRequest) 调用,并获取一个键/值对,对应于已验证元素的名称及其作为 GET 参数的值。响应被评估为 JSON 并且必须true针对有效元素,并且可以是任意false的, undefined或者null针对无效元素,使用默认消息;或字符串,例如。“该名称已被占用,请尝试 peter123”以显示为错误消息。

删除你的complete回调,看看会发生什么。

remote: { // <-- quotation marks not required.
    url: checkTitleAvailable.php,    // echoes "true" or "false"
    type: "post",
    data: {
        proposedSeoTitle:function() {
            return $('#title').val();
        }
    }
},
messages: { // <-- quotation marks not required.
    // quotation marks not required around `remote`.
    remote: "That title already exists"
}

BTW - 引号rulesmessages其他选项不是必需的。

于 2013-11-11T17:47:41.287 回答