jQuery验证插件:没有选择,无法验证,什么都不返回

时间:2013-10-23 19:06:34

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

我有一个包含超过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()方法。

3 个答案:

答案 0 :(得分:9)

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

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


仅当debug:选项设置为true时才会显示控制台“警告”,这仅表示在表单中不存在.validate()的情况下调用debug: DOM。这只是一个警告,而不是错误。此外,您无法真正使用true设置为{{1}}的插件,因为该表单永远不会提交。

  

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

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

答案 1 :(得分:1)

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

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

它将向您显示引导它到达目的地的功能。您还可以看到“范围变量”,以查看某些内容是否未定义/ null这里它不应该是。

答案 2 :(得分: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,他带领我找到了这个解决方案。