为什么jQuery验证添加noValidate属性?

我目前使用:
<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",".pw"]
                }           
            }
        });
    });

HTML片段:

<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');

解决方法

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

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

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

报价OP:

” My form is rendered with the attribute novalidate and therefore I can insert null/empty values into the database.”

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

如果无法输入空数据至关重要,则需要服务器端的数据验证码才能防止这种情况。所有客户端代码都可以轻松绕过,您绝对不能依靠客户端代码来保护数据库

“What is the reasoning for this?”

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

如果您没有HTML5验证属性,则novalidate属性或缺少novalidate属性绝对没有。换句话说,如果您使用HTML5验证属性,它只会切换HTML5验证。

“Does the form have to be set up in a particular way?”

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

“My dirty work around is using: .removeAttr('novalidate')

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

编辑:

OP已经为该问题添加了一些HTML标记

jQuery Validate插件正常运行正常:http://jsfiddle.net/tv7Bz/

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: &lt;span id=&quot...
jQuery 添加水印 &lt;script src=&quot;../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...