5

我有一个包含 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() 的确切调用方法。

4

3 回答 3

10

从 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元素。


引用操作:

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

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


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

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

请参阅:http: //jqueryvalidation.org/validate/

于 2013-10-23T19:18:13.213 回答
1

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

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

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

于 2013-10-23T19:13:07.927 回答
0

这是我为最终追踪导致问题的代码所做的工作。

我编辑了 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,他带领我找到了这个解决方案。

于 2013-10-23T19:35:09.180 回答