2012-09-13 86 views
18

這裏是形式的html代碼:jQuery的驗證插件錯誤:類型錯誤:驗證未定義

<form method="post" id="login" action="/login"> 
<div class="login-element"> 
    <label for="email">E-Mail</label> 
    <input type="text" name="email"> 
</div> 
<div class="login-element"> 
    <label for="password">Passwort</label> 
    <input type="password" name="password"> 
</div> 
<div class="login-element"> 
    <input type="submit" value="Login"> 
</div> 
</form> 

,這裏是我用來驗證碼:

$(document).ready(function() { 
    $("#login").validate({ 
     debug: true, 
     rules: { 
      email: { 
       required: true, 
       email: true 
      }, 
      password: { 
       required: true 
      } 
     }, 
     messages: { 
      email: { 
       required: "Please enter a email adress", 
       email: "Please enter a valid email address" 
      }, 
      password:"Please enter password" 
     } 
    }); 
    }); 

在控制檯下錯誤已記錄:

TypeError: validator is undefined 
...or.settings[eventType] && validator.settings[eventType].call(validator, this[0],... 

這裏有什麼問題?

+0

看起來你忘了包含插件本身。 – Sparky

+0

我認爲這可能是問題。但在頭部我有以下內容: 'code'

+0

這並不意味着什麼,如果他們不是都在位於這些URL沒有給你任何404錯誤。 – Sparky

回答

8

您需要將驗證腳本包含在文檔頭部。

像這樣:

<script src="/js/libs/jquery.validate.js" type="text/javascript"></script> 

另外,請在渲染的HTML表單ID是正確的。

我使用此代碼調用驗證我的網站

 //Validate Form 
     var ids = []; 
     $("form").each(function() { 
      ids.push(this.id); 
     }); 
     var formId = "#" + ids[0] 
     $(formId).validate(); 
+0

我確信,我包括jquery.validate.js因爲這錯誤是從文件扔到線316。 –

+0

你嘗試我的第二代碼片段? –

+0

@AndrewWalters,因爲他的貼吧有沒有錯OP的代碼。 – Sparky

18

這個錯誤發生,因爲我有相同ID的另一個HTML元素。 刪除該代碼後,工作正常。

+0

附加說明:我有一個類似的錯誤,該解決方案,在我的情況是去除其中提到不再存在的一個ID一個額外的驗證更新... –

+0

我忘了補充類的變量(包含HTML來追加),我動態添加元素後,我的目標是進行驗證。我得到了'TypeError:j是undefined'。雖然錯誤是不同的(但類似,這導致我這個職位)的問題是相同的,在這裏描述。謝謝。 – Fr0zenFyr

+0

是引起了我的錯誤,因爲我已經忘了我的表格內關閉的標籤。我有''

    代替''
哼! – guitarlass

2

同樣的問題出現在我身上。其中的原因錯誤是什麼,我用的是代碼:

if ($("#invalidFormId").valid()) { 
.... 
} 

而且form元素的id無效

1

在我的情況下,問題來了,是有jQuery UI的我兩個實例化版本的JQuery 。這使得Jquery的普通代碼正常工作,但刪除了$ .validator的實例。

1

在我的情況下,錯誤是因爲驗證者被調用得太早。我將代碼移到了一個單獨的函數中,並使用underscore.js的延遲方法調用它。像魅力一樣工作。

_.delay(doValidations); 

function doValidations() { 
... 
}); 
7

對於任何人仍然在尋找一個答案及以上不工作的答案..

我花了近3小時內嘗試所有的解決方案,並沒有一次成功。

我終於實現了非常愚蠢的錯誤,我已經在那裏我有包括3個腳本

<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
    <script src="~/Scripts/jquery.validate.min.js"></script> 
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 

,並在頁面的末尾再次頭枕在我的應用程序初始化兩次jQuery的

一次我只有線路。

<script src="~/Scripts/jquery-1.10.2.min.js"></script> 

這將重置$的驗證器功能並導致一切中斷。

有些事情要檢查的情況下驗證沒有發射。

  1. 該腳本的順序是否正確? jquery隨後驗證,然後是unobstrusive。

  2. 是否定義了$ .validator函數?在瀏覽器的控制檯中快速檢查

  3. 要驗證的表單是否被動態創建?如果是這樣,您可能需要重新初始化表單上的驗證器插件,下面會提到我發現這樣做的最佳方式,請選擇適合您的最適合的方法。

    $.validator.unobstrusive.parse('#myForm') 
    

$('#myForm').validate() // this just makes the validator plugin consider the form for unobstrusive validation 

$('#myForm').valid() // this will trigger unobstrusive validation on the form. 
  • 如果您已經爲很多形式複雜的ajax負荷,確保腳本不會一次又一次地包含在每個ajax頁面中,還要確保主頁上的元素仍然具有唯一的名稱。
  • 希望這會有所幫助。

    +0

    究竟是什麼在我的情況下繼續。我有jQuery初始化在頭,然後在ajax組件之一。結果jQuery.validator爲null。一旦我從AJAX組件中刪除了重複的初始化,它就起作用了!謝謝。 –

    1

    我在父視圖(_Layout.cshtml)中有@Scripts.Render("~/bundles/jquery"),並且還在另一個視圖中定義了一些其他jquery腳本標記,它們發生了衝突。

    0

    該插件進來單獨的庫,你需要包括在你的HTML。

    <script src="../jquery-validation/dist/jquery-validate.min.js"></script> 
    <script src="../jquery-validation/dist/additional-methods.min.js"></script> 
    
    0

    同樣發生在這裏。對我來說,在我的代碼一個錯字:

    $(document).ready(function(){ 
        //START of validate 
    $('#reply').validate({ 
        rules:{ 
         message:{ 
          required: true, 
          }, 
         }, 
        submitHandler: function(form) { 
         var data = $("#reply").serialize(); 
         $.ajax({ 
          type:"POST", 
          url:"ajax/scripts/msg_crt.php", 
          data:data, 
          success:function(data){ 
           alert("Loaded"); 
           } 
          }); 
         } 
        }); 
        //END of validate 
        }); 
    
    $(document).on('click','#send', function(){ 
        if($('#replay').valid()){// <--- Here is my selector typo 
         $("#replay").submit(); // <--- Here is my selector typo 
         } 
         return false; 
        }); 
    
    1

    因爲這是第一個話題,谷歌顯示「驗證是未定義的」,那麼我將介紹我解決的問題,也許有人會發現它有幫助。

    我正在使用'maxlength'屬性(沒有任何花哨),我得到了這個錯誤。原因是嵌套形式。其中一個textarea是兩種形式。當您在主視圖中使用窗體的模態(對話框)時可能發生。

    0

    當調用validator.destroy()時發生此問題,該錯誤發生在插件的staticRules方法中。結果原因是關聯的表單元素(element.form)從DOM中分離出來。我解決它通過檢查該元素在DOM調用破壞,使用下面的方法之前:

    document.contains(element) 
    

    希望這可以幫助別人。