【问题标题】:Why is jQuery Validation adding noValidate attribute?为什么 jQuery Validation 添加 noValidate 属性?
【发布时间】:2014-03-21 02:52:13
【问题描述】:

我目前正在使用:

<script src="//code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
<script src="../js/bootStrap/js/bootstrap.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/additional-methods.min.js"></script>

带有验证,例如:

j$('.delValidate').each(function(){

j$(this).validate({
    rules:{
        delivery_Method:{
            required: true
        }
    },
    message:{
        delivery_Method:{
            required: true
        }
    }
});

});

    j$('.validateUser').each(function(){
        j$(this).validate({
            rules:{
                f_Name:{
                    required: true
                },
                l_Name:{
                    required: true  
                },
                username:{
                    required: true,
                    minlength: 6
                },
                password: {
                    validChars: true,
                    noSpace: true,
                    minlength: 6,
                    skip_or_fill_minimum: [3,".pw"]
                },
                confPass: {
                    equalTo: "#password",
                    skip_or_fill_minimum: [3,".pw"]
                }           
            }
        });
    });

HTML sn-p:

<form class="form-horizontal delValidate" action="#" method="post">
<input type="hidden" name="formIdentifier" value="addDel" />
<div class="form-group">
    <div class="col-sm-3">
        <input type="text" name="delivery_Method" class="form-control" placeholder="Enter new method" />
    </div>
    <div class="col-sm-2 col-sm-offset-2">
        <button type="submit"  class="btn btn-default btn-block">Add</button>
    </div>
</div>
</form>

但是当我转到我的页面时,我的表单使用属性 noValidate 呈现,因此我可以将空/空值插入数据库。这是什么原因? 表格是否必须以特定方式设置? jQuery 验证是否发现有问题并因此不起作用? 我的肮脏工作正在使用:

j$(this).removeAttr('novalidate');

【问题讨论】:

标签: jquery jquery-validate


【解决方案1】:

novalidate 属性只是告诉浏览器禁用内置的 HTML5 验证,或忽略您可能使用过的任何 HTML5 验证属性。

jQuery Validate 插件动态添加novalidate 属性,因为通过安装它,您决定让插件处理验证而不是 HTML5。

这两种方法,JavaScript (jQuery) 或 HTML5,都不足以保护您的数据库。 当客户端验证失败、被禁用或被用户/浏览器绕过时,您应该始终进行某种服务器端验证。

引用 OP:

" 我的表单使用属性 noValidate 呈现,因此我可以将 null/空值插入数据库。"

听起来您使用 jQuery Validate 插件的方式非常错误,novalidate 属性不是根本原因。

如果您不能输入null 数据这一点很关键,您将需要服务器端的数据验证代码来防止这种情况。 您绝不能依赖客户端代码来保护数据库,因为所有客户端代码都很容易被绕过。

“这是什么原因?”

如上所述。这是正常的和期望的。该插件只是使用novalidate 从浏览器(HTML5)接管客户端验证。

如果您没有 HTML5 验证属性,那么 novalidate 属性,或者缺少 novalidate 属性,绝对没有任何作用。换句话说,它只会切换 HTML5 验证如果你使用 HTML5 验证属性

“表格是否必须以特定方式设置?”

是的。但是我们看不到你的标记来告诉你哪里出错了。

“我的肮脏工作正在使用:.removeAttr('novalidate')

这并不聪明,也不是完全多余的,具体取决于您的标记。实际上,您可能允许 HTML5 验证与 jQuery Validate 插件同时发生。选择其中一个进行客户端验证。


编辑

此后,OP 已在问题中添加了一些 HTML 标记。

jQuery Validate 插件完全按预期工作:http://jsfiddle.net/tv7Bz/

【讨论】:

  • 很好的解释@Sparky。我已经编辑了我的问题并弹出了一些 HTML,noValidate 现在对我来说更有意义了!我浏览了其他帖子,但无法获得诸如此类的详细解释。注意,我确实有服务器端验证。
  • @AkiraDawson,我将您的代码放入jsFiddle,它工作正常。一定还有其他你没有向我们展示的东西。
猜你喜欢
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 2017-09-02
  • 2013-01-26
  • 2013-03-13
  • 2013-06-12
  • 2021-07-13
  • 2017-08-16
相关资源
最近更新 更多