触发不显眼的验证,但阻止在 MVC4 表单上提交
trigger unobtrusive validation but prevent submit on mvc4 form
我有一个表单,这个表单有一些必需的值,所以在我的视图模型中,我有一些东西,例如:
[Required(ErrorMessageResourceType = typeof(Res_Errors), ErrorMessageResourceName = "errorPacienteNoSeleccionado")]
public int? scheduledIdPersonaSeleccionada { get; set; }
以及提交按钮,但我不想将表单提交到服务器,如果我的验证通过,我只需要执行 jquery 函数。
验证正在工作,但我不知道如何阻止表单发布,而是调用我的函数。
如果您只想在表单提交时执行JavaScript(而不是实际发送信息(,请查看@Ajax.BeginForm
:
@using (Ajax.BeginForm(new AjaxOptions { OnBegin = "MyFunction" }))
{
@Html.EditorFor(x => x.scheduledIdPersonaSeleccionado)
<input type="submit" value="Presentar" />
}
或者,您可以挂接到提交事件并自己执行:
$('form').submit(function(){
if ($(this).valid()) { // validation passed
// cal your jquery function here
}
});
将提交按钮更改为按钮类型。验证将调用,但提交不会
<form>
@Html.EditorFor(x => x.scheduledIdPersonaSeleccionado)
@Html.ValidationMessageFor(x=>x.scheduledIdPersonaSeleccionado)
<input type="button" value="Presentar" onclick="DoSomething();" />
</form>
我通过破解jQuery Validing默认选项解决了它。 jQuery Validate 在后台通过不显眼的验证使用。
如果页面上只有一个表单要验证,则可以全局定义一个提交处理程序,该处理程序仅在提交有效表单时执行:
$.validator.setDefaults({
submitHandler: function (form, e) {
// your code
}
});
它必须在不显眼的初始化之前定义,这发生在 ready
上。或者,您将不得不使用 $.validator.unobtrusive.parse(selectorOfYourForm)
重新解析表单。
就我而言,有许多具有不同需求的表单,我使用了这样的东西:
let submitHandlers = [];
$.validator.setDefaults({
submitHandler: function (form, e) {
let result = true;
$.each(submitHandlers, function (i, submitHandler) {
result = submitHandler(form, e) && result;
});
return result;
}
});
function addUnobstrusiveValidationSubmitHandler(submitHandler) {
if (typeof submitHandler !== 'function') {
throw 'submitHandler must be a function';
}
submitHandlers.push(submitHandler);
}
我让每个submitHandler
只处理它必须处理的表格的责任。提交处理程序应检查表单,如果它不是它应该处理的表单,则无需执行任何其他操作即可return true;
。因此,添加对意外表单执行操作的不良submitHandler
会弄乱其他表单或整个页面。
如果我们可以在 parse
调用中定义 submitHandler
会更好,但目前此调用不接受options
对象。
(还有一些选项可以通过将对象分配给$validator.unobtrusive.options
来全局定义,但是除了errorClass
和errorElement
选项之外,我没有找到太多关于此的文档,而且它似乎没有指定submitHandler
的选项。据我从源代码中看到,我们只能定义以下附加选项,与 jQuery 验证选项匹配:errorPlacement
、invalidHandler
和 success
。
- 可以't让我的if语句处理js中的html表单输入
- 如何使用WCF服务和javascript表单post上传.doc文件
- Javascript生成的表单未提交
- 如何使用javascript或html下载PDF格式的填写表单
- HTML表单提交时未执行外部函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- Ajax发布表单序列化,发布引号'
- 多级HTML表单
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 在验证和发送邮件后更改联系人表单的 html
- jQuery表单添加不适用于下拉列表
- Rails/JSON:如何将JSON用于jquery UI自动完成表单
- 如何从pdftron webviewer获取表单数据
- JS验证ajax返回的html中的表单数据
- Javascript更新孙窗口中的表单元素
- 解析javascript表单验证器
- 触发不显眼的验证,但阻止在 MVC4 表单上提交
- 如何使用 MVC4 表单在 Dropzone.js 中配置自定义上传区域
- 需要在不使用 MVC4 中的 jquery 的情况下异步发布表单