2016-03-01 89 views
1

我有一個帶有窗體的一些視圖的ASP.NET項目。我想更改輸入驗證的觸發器。此代碼用於在啓動時觸發驗證器並且不會失焦。缺少ASP.NET Validator

$(document).ready(function() { 
    var $validatr = $('form').data('validator'); 
    var settngs = $validatr.settings; 

    settngs.onkeyup = function (element, eventType) { 
     if (!$validatr.element(element)) 
     { 
      $(this.currentForm).triggerHandler("invalid-form", [this]); 
     } 
    }; 

    settngs.onfocusout = false; 
}); 

問題

在某些觀點我得到這個錯誤:

TypeError: $validatr is undefined, var settngs = $validatr.settings; 

和驗證錯誤只出現失焦。 我試圖讓驗證也與此代碼,但也失敗了:

var $validatr = $('form').validate() 

控制器,模型和視圖幾乎相同。只是輸入名稱改變。

UPDATE 如果我用這個代碼:

$(document).ready(function() { 
    var $validatr = $('form').validate(); 
    var settngs = $validatr.settings; 
    console.log('settings:'); //I get an output 
    console.log(settngs); //I get an output 

    settngs.onkeyup = function (element, eventType) { 
     console.log(element); //I do not get any message here 
     console.log(eventType); //I do not get any message here 

     if (!$validatr.element(element)) { 
      console.log('if not validator'); 
      $(this.currentForm).triggerHandler("invalid-form", [this]); 
     } 
     else { 
      console.log('else not validator'); 
     } 
    }; 

    // onload initial validation 
    $("form").validate().elements().each(function() { 
     if (!$validatr.element($(this))) { 
      console.log($(this)[0].name + ': initial if not validator'); 
      $(this.currentForm).triggerHandler("invalid-form", [this]); 
     } 
    }); 
}); 

這是設置返回到控制檯:

errorClass:"error" 
errorContainer:Object[] 
errorElement:"label" 
errorLabelContainer:Object[] 
focusCleanup:false 
focusInvalid:true 
groups:Object:{} 
ignore:":hidden" 
ignoreTitle:false 
messages:Object:{} 
onsubmit:true 
rules:Object:{} 
validClass:"valid" 
highlight:function(element,:errorClass,:validClass) 
onclick:function(element) 
onfocusin:function(element) 
onfocusout:function(element) 
onkeyup:function(element,:eventType) 
unhighlight:function(element,:errorClass,:validClass) 

SOLUTION

在年底這是解決方案: MVC 5 Losing validator

+0

我相信你已經在下面的[主題]閱讀(http://stackoverflow.com/questions/33796001/typeerror-validator-is-undefined-in-jquery-validate-js)。 '$('form')。data('validator')'將得到驗證器,如果你已經正確地初始化了jquery和不顯眼的驗證。如果您仍然遇到問題,請發佈更多代碼(包括佈局頁面等) – CrnaStena

+0

最後,這是解決方案。 http://stackoverflow.com/questions/35844505/mvc-5-losing-validator/35845314#35845314 – DJack

+0

太好了。所以這個問題與頁面上的多個表單有關,並縮小了選擇器來選擇正確的表單。感謝更新。 – CrnaStena

回答

0

除了我上面的評論,JavaScript區分大小寫,Validate()應該是validate()

var $validatr = $('form').validate(); 

看到這個jsFiddle。如果您在Chrome中使用inspect,或者在FireFox中使用FireBug,則會在控制檯中看到輸出並且沒有錯誤。

更新1 - 我已經擴展了jsFiddle來模擬您在onkeyup上驗證的效果。讓我知道如果this jsFiddle works爲你。我還爲所有元素添加了初始驗證。

// onload initial validation 
$("form").validate().elements().each(function(){ 
    if (!$validatr.element($(this))) { 
     console.log($(this)[0].name + ': initial if not validator'); 
     $(this.currentForm).triggerHandler("invalid-form", [this]); 
    }  
}); 
+0

我沒有從腳本中得到任何錯誤,但在關鍵幀上的驗證也不起作用。 – DJack