【问题标题】:prevent client side form validation on form mvc防止表单 mvc 上的客户端表单验证
【发布时间】:2015-05-26 18:28:37
【问题描述】:

当用户将表单另存为草稿时,我试图阻止所有验证规则发生。我的按钮是

<input id="saveDraft" type="button" value="Save As Draft" class="btn btn-default"/>

我已经尝试添加novalidate,以及formnovalidateclass="cancel"

我只是希望用户能够保存草稿,而无需填写所有必填字段,而无需使用繁重的 javascript 来删除所有验证属性。

编辑:.js 文件

        submitButton.addEventListener("click", function () {
        myDropzone.processQueue();          
        if (myDropzone.files.length == 0) {
            $('form').validate({
                onsubmit: false
            });
            $('form').submit();
        };
    });

【问题讨论】:

  • 只需将class="cancel" 添加到提交按钮将绕过jQuery Validation 插件。但是,这是一个有争议的问题,因为无论如何 jQuery Validate 插件都会忽略 type="button"click 处理程序中的 .submit() 只是通过将按钮变为提交来触发验证插件。您也不能调用.validate(),因为unobtrusive-validation 插件已经在为您调用该方法。我的建议是完全摆脱您的click 事件监听器,将按钮更改为type="submit" 并再次尝试class="cancel"
  • 顺便说一句,novalidate 属性仅用于禁用 HTML5 浏览器验证。
  • 据我了解,您是说&lt;input type="button" 应该足以阻止此表单验证,但是,这不是正在发生的事情,因为验证错误阻止了提交。
  • 您正在使用 click 处理程序创建自己的问题。您正在使用type="button" 并强制它提交表单......这反过来又会激活验证。阅读我编辑的评论。请参阅:jsfiddle.net/p4bdevokjsfiddle.net/p4bdevok/1
  • 我更喜欢你的方式。提交按钮的问题是,表单最终可以在 dropzone.js 完成将文件上传到服务器之前保存,对吗?这就是为什么我在 processQueue() 方法运行时阻止提交表单的原因。有其他方法来处理这个问题吗?

标签: jquery asp.net-mvc jquery-validate unobtrusive-validation


【解决方案1】:

您可以绑定 onsubmit 选项并停止验证。 http://jqueryvalidation.org/validate/#onsubmit

<input id="saveDraft" type="button" value="Save As Draft" class="btn btn-default"/>
<script type="text/javascript>
    $(input#saveDraft).click(function(event) {
        event.PreventDefault();
        $("form#myFormId").validate({
            onsubmit: false
        });
        $("form#myFormId").submit();
        //if you are submitting via ajax and want validation when the form is completed/submitted, set the 'onsubmit: true' before exiting this function.
    });
</script>

请记住,您在服务器端进行的任何验证都必须得到处理。

【讨论】:

  • 已经有一个服务器端跳过验证方法。打算试试这个,不幸的是我已经把我的“saveDraft”按钮绑在一堆 dropzone.js 东西上
  • 这仍然不适合我。查看我的编辑以了解我尝试过的内容
  • event.PreventDefault() 有语法错误。应该是 event.preventDefault(小写“p”)
猜你喜欢
  • 2012-09-19
  • 2014-01-31
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
相关资源
最近更新 更多