2013-10-23 93 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