【问题标题】:How to combine jQuery validation plugin with jQuery selecter plugin?如何将 jQuery 验证插件与 jQuery 选择器插件结合使用?
【发布时间】:2015-11-18 14:35:16
【问题描述】:

我正在处理一个旧项目,其中包含大量 jQuery 和一些 jQuery 插件。其中一个插件是jQuery Validation Plugin,它根据提供的自定义规则验证输入。另一个是jQuery Selecter plugin,它用一个模仿select标签行为的漂亮的div替换了普通无聊的select标签。

我现在遇到的问题是 jQuery Selecter 插件隐藏了普通的 select 标签,而是用户与 .selecter div 交互,然后以某种方式将选定的值传递给 select 标签。另一方面,jQuery Validation Plugin 仅在用户直接与该元素交互(单击它)时才尝试验证 select 元素。 jQuery Validation Plugin 不会被select 标签值的改变触发。这意味着当用户单击.selecter 元素并且jQuery Selecter 插件更改select 的值时,jQuery Validation Plugin 不会尝试检查select 元素的值并且仍然认为该元素无效.

所以我的问题是,有没有人有任何经验在选择器插件更改select元素的值时使用这两个插件以及使验证插件工作的任何经验?

【问题讨论】:

  • 基本上,您需要为隐藏的select 编写一个change 处理程序,该处理程序调用.valid() 方法来强制立即验证此元素。但是,这就是我可以提供的所有帮助,而无需查看相关的 HTML 和 JavaScript 代码。
  • 嗯,这里是 jQuery 验证插件的代码:ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/… 也许你会很清楚这个文件中声明的默认函数(onclickonkeyuponfocusout)是如何捕获的相关事件。如果我明白这一点,那么也许我可以添加一个自定义 change/onchange 处理程序?
  • 我们不需要看插件的源代码,也不建议你编辑它们。我们需要查看你的相关的 JavaScript 代码...你是如何实现这些插件方法和表单的相关 HTML 的。

标签: jquery jquery-validate selectlist jquery-selecter-plugin


【解决方案1】:

用户没有与原始 select 元素进行交互,因为它是隐藏的,因此不会触发插件的内置验证事件。

看不到你的 JavaScript 或你的标记,所以这个答案是完全通用的。但是,您将编写一个 change 处理程序,该处理程序在 select 更改时触发,并以编程方式对其进行强制验证。

$('#yourSelect').on('change', function() {
    $(this).valid(); // force validation
});

$('#yourSelect') 是一个 jQuery 选择器,它以原始隐藏的 select 元素为目标。

【讨论】:

  • 是的,如果我用自定义类标记所有需要验证的选择标签,然后在更改时强制对它们进行验证,那应该可以。谢谢你的建议。虽然这是一个有点脆弱的解决方案:开发人员总是需要记住在需要验证的 select 元素上粘贴一个特定的类——这很容易忘记,因此会破坏应用程序的行为。我正在考虑稍微修改其中一个插件的代码(使用 jQuery Validation 插件非常简单)以使插件捕获change 事件完成所有工作。
  • @azangru,修改插件源代码是最脆弱的解决方案,因为只需将插件升级到最新版本就会破坏这一点。向页面上的 JavaScript 添加事件处理程序一点也不稀奇。同样,如果您只是向我们展示相关代码,则可能会提供更自定义或更可靠的答案。
  • 恐怕要到明天才能访问带有代码的存储库。然后我会展示相关的部分。
  • 我重新审视了我的代码,找到了一个放置建议代码的好地方。现在一切正常。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 2012-04-19
  • 2018-04-03
  • 2012-04-30
  • 2016-02-24
  • 1970-01-01
相关资源
最近更新 更多