【问题标题】:Jquery Validation dosen't work anymore after enabling client side validation启用客户端验证后,Jquery 验证不再起作用
【发布时间】:2012-05-19 12:36:46
【问题描述】:

为了改善我的应用程序,我激活了客户端验证,它工作得很好,但不幸的是,一些 Jquery 表单验证已被拒绝并且不再工作:(
这是我的 JS 代码:

<script src="../../Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.ui.datepicker.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.ui.core.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.ui.widget.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $("form").validate({
            rules: {
                idv: { required: true },
                dd: { required: true },
                df: { required: true },
                remise: { required: true }
            }
        });
    });
</script> 

这是我的表单代码:

<% using (Html.BeginForm("Promo", "Agence", FormMethod.Post, new { @class = "search_form" })) { %>

    <p>
        Matricule vehicule : <br />
        <%: Html.TextBox("idv")%> <br />
        De : <br />
        <%: Html.TextBox("dd")%> <br />
        Juqu'a  : <br />
        <%: Html.TextBox("df")%> <br />
        Remise : <br />
        <%: Html.TextBox("remise") %> % <br />
        Description : <br />
        <%: Html.TextArea("des", new {rows="4", cols="30" })%>
    </p>
    <input type="submit" value="Ajouter" class="button"/>            
<% } %>

在这种形式中,我不需要使用模型,我在同一页面中使用其他模型,Jquery 验证工作得很好,直到我激活了验证客户端。

【问题讨论】:

  • 定义“不起作用”。您是否在 Web 浏览器中收到控制台错误?是否调用了 jQuery 代码?调试它时会发生什么。如果错误发生在您的 JavaScript 代码中,那么它就在客户端。服务器端视图代码不会有太大帮助。当您打开客户端验证时,发送到浏览器的输出发生了一些变化。在浏览器中进行调试并尝试找出发生了什么变化以及它是如何造成重大变化的。
  • 没有错误显示,但是当我点击按钮提交时,Jquery.validation script 没有被执行,在我在我的应用程序中启用 client validation 之前,这个相同的脚本正在工作
  • 那么发生了什么变化?启用客户端验证会极大地改变发送到浏览器的 HTML。根据到目前为止的描述,很有可能您的 jQuery 代码现在无法绑定到元素(可能元素已更改)或其他一些发出的代码正在窃取绑定(覆盖 onclick 并将事件标记为已处理, 也许)。你需要调试你的客户端代码。
  • 这取决于您的浏览器。我选择的个人客户端调试器是 Firefox 中的 Firebug。最新版本的 IE 也有开发工具,Chrome 和 Safari 也有。至于如何正确使用它们,那完全是另一回事了。我无法真正在几场比赛中教你,这是你必须学习的东西。
  • 我做了一些测试,我认为是因为表单之间存在一些冲突,所以我进行了更改 $(document).ready(function () { $("#form1").validate({ 并在我的表单中将她的名字更改为 form1,但仍然无法正常工作

标签: jquery asp.net-mvc validation


【解决方案1】:

验证这两行是否在 appSettings 部分的 web.config 文件中

<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>

并将这一行添加到您的布局中

    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

同时修改您现有的脚本,使它们都使用src="@Url.Content("~/Scripts/...

【讨论】:

  • 客户端验证工作,但其他脚本Jquery.validate 不再工作,当我点击提交时,验证脚本未被调用
  • 不,你已经重复了同样的事情,你已经写了一个客户端验证,在我的情况下它工作,问题是在 Jquery 验证功能它不起作用。你现在明白了吗?
  • 您的布局缺少 jquery.unobtrusive 脚本,有 3 个脚本必须添加到您的布局中,而不仅仅是您列出的 2 个。
  • 我认为:Microsoft's jQuery Validate Unobtrusive makes other validators skip validation 这意味着我的功能被自动跳过了,所以你有什么想法
  • 好吧,我接下来看到的是..脚本包含在布局页面中..并导致文档在准备好时尝试触发表单的验证脚本..如果包含在页面上没有表格,这可能是个问题。我建议在浏览器的开发工具、IE9 开发工具、Chrome 开发工具或 Firebug for FireFox 中调试该脚本...在脚本中设置断点,但还要检查控制台是否存在浏览器可能抛出的任何错误,这应该会有所帮助为您指明正确的方向
猜你喜欢
  • 2012-05-26
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多