2014-04-30 7 views
5

के लिए त्रुटि संदेश प्रदर्शित नहीं कर रहा है, मैंने उपयोगकर्ता इनपुट को सत्यापित करने के लिए नॉकआउट सत्यापन प्लगइन वाला एक पृष्ठ सेट किया है। मेरे पास दो तत्व हैं: एक नियमित select है और दूसरा selectmultiple सेट के साथ है। विचार दोनों तत्वों की आवश्यकता है।नॉकआउट-सत्यापन एकाधिक एकाधिक

सत्यापन कॉल फायरिंग है, लेकिन समस्या यह है कि चुनिंदा एकाधिक के लिए त्रुटि संदेश प्रदर्शित नहीं हो रहा है।

यहाँ मेरी जे एस कोड है:

ko.validation.init(); 

    function isNotUndefined(val) { 
     return (typeof val != "undefined"); 
    } 

    function isArrayNotEmpty(val) { 
     return (val.length > 0); 
    } 

    var viewModel = function() { 
     var self = this; 

     self.memberType = ko.observable().extend({ 
      validation: {validator: isNotUndefined, message:'Please select gender'} 
     }); 
     self.seekingTypes = ko.observableArray().extend({ 
      validation: {validator: isArrayNotEmpty, message:'At least one option is required'} 
     }); 
     self.memberTypeSource = [ 
      { id: 1, text: 'Man' }, 
      { id: 2, text: 'Woman' } 
     ]; 
     self.errors = ko.validation.group(self); 
     self.doValidation = function() { 
      console.log('error count=' + self.errors().length); 
      if (self.errors().length == 0) { 
       console.log('Yay.'); 
      } else { 
       self.errors.showAllMessages(true); 
      } 
     }; 

     return { 
      memberType: self.memberType, 
      seekingTypes: self.seekingTypes, 
      memberTypeSource: self.memberTypeSource, 
      errors: self.errors, 
      doValidation: self.doValidation, 

     } 
    }; 

    addEventListener('load', function() { 
     ko.applyBindings(viewModel); 
    }); 

इस HTML है:

Gender: <select data-bind="value: memberType, 
        options: memberTypeSource, 
        optionsText: 'text', 
        optionsValue: 'id', 
        optionsCaption: 'Please select'"></select> 
<br /> 
Seeking: <select data-bind="selectedOptions: seekingTypes, 
        options: memberTypeSource, 
        optionsText: 'text', 
        optionsValue: 'id'" 
       multiple></select> 
<br /> 

<button type="button" data-bind='click: doValidation'>Submit</button> 

मैं भी इनपुट पाठ तत्व के साथ सत्यापन परीक्षण किया है, त्रुटि संदेश ठीक प्रदर्शित होता है।

किसी भी मदद की बहुत सराहना की जाती है।

उत्तर

6

सत्यापन प्लगइन केवल value और checked बाध्यकारी को स्वचालित रूप से "सत्यापन" संगत बनाने के लिए बाध्यकारी में संशोधन करता है।

ko.validation.makeBindingHandlerValidatable('selectedOptions'); 
ko.applyBindings(new viewModel); 

डेमो JSFiddle:

तो selectedOptions हो जाता है ताकि आप सत्यापन काम करने के लिए ko.applyBindings से पहले selectedOptions साथ makeBindingHandlerValidatable कॉल करने के लिए अपने बहु के साथ चयन की जरूरत है मान्य नहीं है।

एक वैकल्पिक समाधान के रूप में आप कर सकते हैं भी आप validationCore (या validationMessage binding अलग अवधि पर) अपने चयन पर:

<select data-bind="selectedOptions: seekingTypes, 
        options: memberTypeSource, 
        optionsText: 'text', 
        optionsValue: 'id', validationCore: seekingTypes" 
        multiple></select> 

डेमो JSFiddle

+0

मेरी समस्या के लिए एक नहीं बल्कि तीन समाधान प्रदान करने के लिए बहुत बहुत धन्यवाद, वास्तव में इसकी सराहना करते हैं। बीटीडब्ल्यू क्या आपको पता है कि मुझे नॉकआउट-सत्यापन पर अच्छा दस्तावेज कहां मिल सकता है (गीथूब पर विकी पेज पर एक के अलावा)? –

+0

केओ का कौन सा संस्करण 'मेक बाइंडिंग हैंडलर वैलिडेटेबल' उपलब्ध है? मुझे यह कहते हुए एक त्रुटि मिलती है कि 'मेक बाइंडिंग हैंडलर वैलिडेटेबल एक functon नहीं है ... – Azimuth

+0

@Azimuth यह फ़ंक्शन केओ सत्यापन पुस्तकालय का हिस्सा है, हालांकि मुझे नहीं पता कि यह किस संस्करण में जोड़ा गया था। यह 2.0.3 https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.3/knockout.validation.min.js और संस्करण 1.0.2 https: // के साथ भी ठीक काम कर रहा है cdnjs.cloudflare.com/ajax/libs/knockout-validation/1.0.2/knockout.validation.min.js – nemesv

संबंधित मुद्दे