【问题标题】:Trigger an event if there are validation errors?如果有验证错误触发事件?
【发布时间】:2015-04-25 23:57:07
【问题描述】:

我需要为表单验证失败的任何情况添加句柄。

我读过this,说明我必须按如下方式添加处理程序:

$('form').bind('invalid-form.validate', function () {
  console.log('form is invalid!');
});

但只有当我尝试提交表单时才会触发此事件。

我需要处理在表单后验证(即元素失去焦点等)时触发的事件。

我想要实现的是,我有一个很大的表单(约 50 个字段),它被拆分为 Bootstrap tabs
我希望,当有任何新的验证失败或成功时,在包含无效/有效元素的选项卡的选项卡标题中设置或清除错误类。附言我的问题不在于如何在选项卡中设置这些类。我只想知道要处理哪些事件,以便在整个表单中的每个验证状态更改时收到通知。

【问题讨论】:

  • jQuery 或 Validate 插件没有提供这样的事件。您必须将focusoutblurkeyup 等附加到每个输入元素,并使用.valid() 方法来测试表单。
  • @Sparky 有没有非侵入式验证插件提供的onvalidated 之类的事件?
  • 我对@9​​87654330@插件一点也不熟悉。然而,在我见过的数千个 jQuery Validate 问题中,我从未见过任何自定义事件的描述。
  • 你到底想做什么?为什么不能只使用one of the built-in options
  • @Sparky 具有不显眼的验证,您根本不会调用 validate。它为您设置了这一切。无论如何,我已经根据我的要求更新了我的问题。

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


【解决方案1】:

我需要为表单验证失败的任何情况添加处理程序。

$('input, textarea, select').on('focusout keyup', function() {
   if ($('form').valid()) {
       // do something
   }
});

我希望,当出现任何验证错误时,在包含无效元素的选项卡标题中设置一个错误类。

嗯,这与您最初询问的内容有些不同。 (忽略我回答的前半部分。)

使用 highlightunhighlight 选项以及 jQuery DOM 遍历来设置和取消设置 DOM 中您希望的任何类。 highlight 在无效时触发,unhighlight 在有效时触发。以this answer 为例。

使用the .setDefaults() method 设置这些选项,因为您使用的是unobtrusive-validation 插件并且无法直接访问.validate() 方法。

【讨论】:

  • 我认为highlightunhighlight 确实是我正在寻找的。无论如何,我可以从我正在设置的突出显示功能中调用原始的highlight 功能吗? Here'是原始函数,我必须将其复制并粘贴到我的覆盖脚本中还是存在于任何地方?
  • @Shimmy,你放在那里的任何东西都会覆盖默认值。
  • 换句话说,如果您想保持默认行为,您需要将默认函数复制到您的函数中。然后在此基础上构建您的新行为。
  • 我最终使用了invalid-form.validate 事件,这是从底层jquery invalidHandler 触发的不显眼的验证事件。不幸的是,我错过了函数中的某些内容,使其无法正常工作。我根本不应该问这个问题,浪费你的时间。无论如何,你的回答教会了我很多关于 jquery 验证的工作原理。
  • @Shimmy, looking at the source code, disabled 字段无论如何都会被忽略......它很难完全绕过ignore 选项。所以ignore: ':disabled' 实际上与ignore: [] 相同。见:jsfiddle.net/amy4sven
猜你喜欢
  • 2015-07-24
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多