【问题标题】:jQuery validation plugin: Nothing selected, can't validate, returning nothingjQuery 验证插件:未选择任何内容,无法验证,不返回任何内容
【发布时间】:2013-10-23 19:06:34
【问题描述】:

我有一个包含 80 多个 js 文件的大型 Rails 项目,并且我不断在 Chrome 的控制台中收到此消息:

Nothing selected, can't validate, returning nothing. 

不过,我不知道是什么发出了该消息。我使用验证插件的所有表单似乎都按预期正确验证了。

如何回溯以查看实际上是哪个文件或函数导致此消息出现?

这是验证插件的相关部分:

  // if nothing is selected, return nothing; can't chain anyway
  if ( !this.length ) {
    if ( options && options.debug && window.console ) {
      console.warn( "Nothing selected, can't validate, returning nothing." );
    }
    return;
  }

似乎在一个不存在的选择器上调用了 validate(),但我在整个项目的数百个地方调用了 validate(),这就是为什么我正在寻找一种方法来跟踪对validate() 方法。

【问题讨论】:

  • 尝试在您的项目中搜索此文本?
  • 它在 jquery.validate.min.js 中找到它,但这似乎是意料之中的......
  • 没有看到你的代码就不可能知道这里发生了什么。
  • 我不可能粘贴所有 80 多个 javascript 文件。这就是为什么我要求帮助跟踪错误...
  • 如果此警告来自验证插件,则无需粘贴所有 80 多个 JavaScript 文件

标签: jquery ruby-on-rails jquery-validate


【解决方案1】:

来自 jQuery Validate 插件本身...

(function($) {
$.extend($.fn, {
    // http://docs.jquery.com/Plugins/Validation/validate
    validate: function( options ) {

        // if nothing is selected, return nothing; can't chain anyway
        if ( !this.length ) {
            if ( options && options.debug && window.console ) {
                console.warn( "Nothing selected, can't validate, returning nothing." );
            }
            return;
        }
 ....

因此,您使用插件的方式似乎有些问题。该代码似乎表明您没有正确地将 .validate() 附加到您的 form 元素。


引用 OP:

“但我在整个项目的数百个地方都调用了validate(),这就是为什么我正在寻找一种方法来追踪对validate() 方法的确切调用。” p>

您的控制台错误仅与浏览器中加载的页面相关。当然,您不会在单个页面上加载数百个 <form>...</form> 对象。


只有当您将debug: 选项设置为true 时,控制台“警告”才会出现,这仅意味着在DOM 中不存在的表单上调用.validate()。这只是一个警告,而不是错误。此外,您不能真正使用将debug: 设置为true 的插件,因为表单永远不会提交。

"启用调试模式。如果为 true,则 未提交表单并且确定 错误显示在控制台上(将检查 window.console 属性存在)。尝试在刚刚提交表单时启用 验证停止提交。示例:阻止表单 提交并尝试通过警告帮助设置验证 关于缺少的方法和其他调试消息。”

见:http://jqueryvalidation.org/validate/

【讨论】:

  • 同意。当我尝试与原始帖子进行交流时,我在我的项目中多次调用 validate() 。所以我正在尝试追踪并查看问题所在...
  • @croceldon,控制台错误仅与浏览器中加载的页面有关。您在一页上加载了多少个表单?
  • 在大多数情况下,只有一种形式,但有时是两种。
  • @croceldon,所以当控制台出现错误/警告时,只与一两种形式有关。
  • 只有在您设置了debug: true 时才会出现警告,这仅表示您在不存在的表单上调用.validate()。这只是一个警告,而不是错误。此外,您不能真正使用将debug: 设置为true 的插件。
【解决方案2】:

如果您单击控制台并查看错误出现的位置,请单击发生错误的文件。

为此行设置breakpoint 并刷新页面。在您再次遇到错误之前,请查看右侧的 stacktrace 选项,并注意它是如何到达这一点的,这可以帮助您向后确定根本问题所在。

它将向您显示将其引导至其所在位置的功能。您还可以查看“作用域变量”,以查看此处不应该存在的未定义/空值。

【讨论】:

    【解决方案3】:

    这就是我最终找到导致问题的代码所做的工作。

    我编辑了 jquery.validate.min.js 文件,使其看起来像这样:

      if ( !this.length ) {
        if ( options && options.debug && window.console ) {
          console.warn(this.selector); //this showed the call to validate() that was the problem
          console.warn( "Nothing selected, can't validate, returning nothing." );
        }
        return;
      }
    

    查看控制台,然后我找到了相应的文件,其中包含以下内容(在 CoffeeScript 中):

      $('body.drawing_categories #yield form').validate
        debug: true,
        submitHandler: (form) ->
          add_addl_drawings = $('<input/>').attr(
            type: 'hidden',
            id: 'add_addl_drawings'
            name: 'add_addl_drawings'
          ).appendTo(form)
    

    debug: true 部分是问题所在。一旦我拿出它,控制台中的警告就消失了。

    非常感谢并感谢 Sparky,他带领我找到了这个解决方案。

    【讨论】:

    • 不用编辑插件,你可以在你的 JS 中全局搜索debug: true。不管它值多少钱,你只是关闭了警告信息。根本原因仍然存在:在 DOM 中不存在的表单上调用 .validate() 数百次。你能做什么或不能做什么是另一回事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2019-04-19
    • 2021-09-05
    • 2010-12-02
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多