2014-07-19 28 views
0

我有淘汰賽做這個輸入驗證..我想。我無法設置任何中斷,但它從$ root.ValidationMessages.Object發送靜態文本如何在驗證失敗後在Knockout中調用ajax?

下面是下面的輸入元素。

<input id="objectNumber" name="objectNumber" class="setsize ats-ccnumber valid" 
type="text" placeholder="Number" 
data-bind="value: PaymentOptions.Object.Number> 

我想怎麼辦時,驗證失敗讓輸入ID和之前的文本被消滅了驗證失敗時輸入的無效的文本以某種方式發送異步Ajax調用。這裏是'驗證對象的KO處理程序'

ko.bindingHandlers.validateObject = { 
'init': function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 
    var value = valueAccessor(); 
    var message = value; 
    var when = function() { return true; }; 

    if (value != null && typeof value == "object") { 
     if (value.when != null) { 
      when = function() { 
       if (typeof value.when == 'function') return value.when(); 
       return value.when; 
      }; 
     } 
     message = value.message; 
    } 
    addObjectValidation(when, getValueFor(message), element); 
}, 
'update': function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 
} 

};

這裏是addObjectValidation的Javascript

function addObjectNumValidation(callback, message, element) { 
$(element).rules("add", { required: function (x) { return !$(x).attr('disabled') && callback(); }, number2 : function() { return { objectType: $('#objectType').val(), required: !$(x).attr('disabled') && callback() }; }, messages: { required: message, creditcard2: message} }); 
var messages = $.data(element, 'validationMessages') || []; 
messages.push(message); 
$.data(element, 'validationMessages', messages); 

}

我看不出這是正在爲驗證。首先暴露於Knockout。任何人都可以解釋發生了什麼事情,如果可能的話,以及如何在驗證失敗之後但在該字段被清除之前發出ajax調用?

+0

是否有任何理由在數字有效後執行ajax請求?最好的做法是在點擊按鈕時僅使用ajax執行信用卡的帖子。 –

+0

有數據庫日誌記錄是每個失敗的表單輸入嘗試所必需的。 – Proximo

回答

0

驗證通過JQuery驗證完成。它完全獨立於KnockoutJS並與之無關。

要得到驗證失敗每次的形式進行驗證,聽invalid-form事件然後訪問jQuery驗證的errorList成員

$("form").on("invalid-form", function (e) { 
    console.log($(e.target).validate().errorList); 
}); 

順便說一句,如果可能的話,我建議您更換jQuery驗證與淘汰賽驗證。

+0

我已經知道了,但不是那麼好。謝謝 – Proximo

0

使用Knockout-Validation插件將是更好的選擇,而不是使用JQuery驗證本身。它支持使用AJAX調用進行遠程驗證。它也基於JQuery驗證,所以大多數驗證規則是相同的

+0

我的手被束縛了..我現在感覺更糟。 – Proximo