Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php jQuery验证插件-远程验证每个字段_Php_Jquery_Jquery Validate - Fatal编程技术网

Php jQuery验证插件-远程验证每个字段

Php jQuery验证插件-远程验证每个字段,php,jquery,jquery-validate,Php,Jquery,Jquery Validate,我喜欢这个插件(),但如果我想远程验证所有字段,我会觉得有限。我已经有了一个php验证类,并希望使用它 假设我有如下字段: fname 名字 用户名 电子邮件 假设我想远程验证整个表单…这样做似乎是多余的 $('#login form').validationOptions({ rules: { "fname": { remote: { url: 'process.php',

我喜欢这个插件(),但如果我想远程验证所有字段,我会觉得有限。我已经有了一个php验证类,并希望使用它

假设我有如下字段:

  • fname
  • 名字
  • 用户名
  • 电子邮件
假设我想远程验证整个表单…这样做似乎是多余的

$('#login form').validationOptions({
        rules: {
            "fname": {
                remote: {
                    url: 'process.php',
                    type: 'post',
                    dataType: 'json',
                    dataFilter: function(data) {
                        var json = JSON.parse(data);
                        console.log(json);
                        if (json.result === true) {
                            return true;
                        }
                        return '"' + json.message + '"';
                    }
                }
            },
            "lname": {
                remote: {
                    url: 'process.php',
                    type: 'post',
                    dataType: 'json',
                    dataFilter: function(data) {
                        var json = JSON.parse(data);
                        if (json.result === true) {
                            return true;
                        }
                        return '"' + json.message + '"';
                    }
                }
            },
           ........etc......
        },
    });
我是否可以告诉插件远程验证整个表单,而不必每次都声明js中的每个字段或远程规则和url…类似于

$('#login form').validationOptions({
        remote: {
            url: 'process.php',
            type: 'post', //All form fields should be posted
            dataType: 'json',
            dataFilter: function(data) {
                var json = JSON.parse(data);
                console.log(json);
                if (json.result === true) {
                    return true;
                }
                return '"' + json.message + '"';
            }
        },
});

我知道代码不会像我写的那样工作,但你应该明白我的意思。是的,我知道我可以使用ajax post来实现这一点,并使用成功回调来实现我所需要的功能,但我使用的是一个具有插件且运行良好的模板。我想使用他们已经拥有的功能。我唯一想做的更改是在不声明每个字段和远程规则的情况下远程验证整个表单。

QuoteOP:

“有没有一种方法可以让插件远程验证整个表单,而不必每次都声明js中的每个字段或远程规则和url…”

“…验证…而不声明每个字段和远程规则。”

如果对每个字段使用相同的选项声明
remote
规则,那么是的,有一种更简单的方法可以在每个字段上声明它。假设您的
remote
规则已在运行,请使用
.rules()
方法,如下所示

$('input[type="text"]').each(function() {
    $(this).rules('add', {
        remote:  {
            // your remote options
        }
    });
});
  • 使用
    $('input[type=“text”]”)
    表单中的所有
    文本
    输入
    元素为目标。否则,请使用所需的任何选择器,以针对相关字段

  • 使用jQuery
    .each()
    .rules()
    方法应用于选择器所针对的元素组中的每个元素。
    .each()
    方法是绕过插件限制的一种方法,当附加到表示一组元素的jQuery选择器时,它会忽略除第一个元素之外的所有元素

  • 您仍然必须调用
    .validate()
    方法(使用任何其他选项),以便在
    表单上初始化插件

  • 不确定是否需要
    dataType
    和/或
    dataFilter
    选项。默认类型为
    JSON
    ,发送的数据是要计算的字段的值。如果
    echo
    从PHP返回一个JSON字符串,该字符串将成为错误消息


远程验证仅在用户与服务器的往返过程中有用。即使您进行远程验证,您仍然需要进行服务器端验证。用户不仅可以关闭JavaScript,恶意用户还可以完全绕过浏览器(我经常通过telnet发送原始请求进行测试)。有没有一种方法可以让模板语言、PHP类和JQ插件协同工作?我肯定知道在多个位置保持验证器同步的痛苦。这不是我的选择,事情总是不同步。您使用的是哪种模板和PHP?谢谢您的评论。是的,关于客户端验证,您是对的,这就是为什么我有自己的php类要回退,如果不启用JS,表单将优雅地回退到服务器端和传统的HTTP POST over ssl。我正在使用芒果管理主题-从我的需要,它是完美的。唯一让人回想起主题的地方是,有时候关闭所有不需要的作者并不容易。我可以编写自己的js php回退验证器(我在过去做过)…只是主题写得很好,如果可以的话,可以使用它。仅供参考,回退标记仅用于格式化内联代码。只需使用
{}
按钮或每行缩进至少四个空格即可格式化代码块。。。那也许行得通。但是,对于其他字段,如select、radio、checkbox、textarea,我需要为每种类型的元素声明add方法吗?正如您所看到的,我正在尝试使用干代码。我可以做一些像。。。对于form#的每个form元素,某种形式是否应用此规则?或使用一个类,然后将规则应用于该类的那些元素$('.validate theses').rules('add',{remote:{//your remote options}}});})@greaterKing,就像我在回答中所说的,“[只要]使用您需要的任何选择器来定位相关字段”~因此,是的,
将是一个定位解决方案。@greaterKing,但也像我在回答中所说的,
.each()
方法是一种绕过插件限制的方法,当附加到表示一组元素的jQuery选择器时,它会忽略除第一个元素以外的所有元素。“~因此,不,如果不将
.rules()
附加到
$('.validate this')
,则必须将其包装在
.each()
中。只需按照我的示例代码将我的
$('input[type=“text”]”)选择器替换为您的
$('.验证这些“)
选择器即可。@greaterKing,只有这么多。对于我的回答,我选择了适合你情况的最佳方法,我很公平,非常感谢你的帮助。我会接受这个答案。