2013-10-23 52 views
4

我有超过80 js文件大Rails项目,和我不断收到在Chrome的控制台此消息:jQuery的验证插件:没有选中,无法验证,返回什么

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()方法的确切调用。

+0

尝试在您的项目中搜索此文本? – Krishna

+0

它在jquery.validate.min.js中找到它,但这似乎是预期的... – croceldon

+0

在没有看到您的代码的情况下,无法知道这里发生了什么。 – Sparky

回答

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,他让我得到了这个解决方案。

+0

而不是编辑插件,你可以全局搜索你的JS为'debug:true'。无论它值多少钱,你只会关闭警告信息。根本原因仍然存在:在DOM中不存在的表单上调用'.validate()'数百次。你可以或不可以做的是另一回事。 – Sparky

1

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

breakpoint设置为该行并刷新页面。在再次出现错误之前,请查看右边的堆栈跟踪选项,并注意它到底是如何实现的,这可以帮助您确定底层问题的位置。

它会显示你的功能,导致它在哪里。你也可以看到“范围变量”,看看在这里不应该是什么东西是undefined/null。

8

从jQuery验证插件本身...

(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()确切通话方法。”

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


控制台“警告”,如果你有debug:选项设置为true才会出现,它只是意味着.validate()被称为是不会在DOM存在的形式。这只是一个警告,不是一个错误。此外,您无法真正使用debug:设置为true的插件,因为表单永远不会提交。

启用调试模式。如果为真,表单未提交和某些 错误显示在控制台上(将检查window.console 属性是否存在)。尝试启用表单时,只需提交 即可停止提交。例如:从 提交防止形式,并试图帮助失踪方法和其他调试消息与警告 建立验证“

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

+0

同意,则无需粘贴所有80多个JavaScript文件。正如我试图与原始文章沟通,我在我的项目中多次调用validate()。所以我试图跟踪并查看哪个调用是问题... – croceldon

+0

@croceldon,控制台错误只与在浏览器中加载的页面有关。您在一个页面上加载了多少个表格? – Sparky

+0

在大多数情况下,只有一种形式,但有时只有两种。 – croceldon