2017-02-28 2 views
0

Je suis en train d'ajouter la validation pour un numéro de téléphone,validation conditionnelle dans Knockout

J'ai besoin d'être nécessaire mais je ne veux que le modèle appliqué si le pays est aux États-Unis C'est ce que j'ai, mais il échoue quand j'ai le Canada ou tout autre pays choisi

self.phone = ko.observable().extend({ 
     required: { 
      onlyIf: function() { 
       return self.country() == "US"; 
      } 
     }, 

     pattern: { 
      message: 'Please enter a valid phone number in ###-###-#### format', 
      params: /^(\d{3}-\d{3}-\d{4})$/ 
     } 
    }); 

Répondre

2

très simple. il suffit d'ajouter le même onlyIf condition pattern validateur

function ViewModel() { 
 
    var self = this; 
 
    self.country = ko.observable(); 
 
    self.phone = ko.observable().extend({ 
 
    required: true, 
 

 
    pattern: { 
 
     message: 'Please enter a valid phone number in ###-###-#### format', 
 
     params: /^(\d{3}-\d{3}-\d{4})$/, 
 
     onlyIf: function() { 
 
     return self.country() == "US"; 
 
     } 
 
    } 
 
    }); 
 
    
 
    self.errors = ko.validation.group(self); 
 
    
 
    self.isValid = function() { self.errors.showAllMessages() } 
 
    self.clear = function() { self.errors.showAllMessages(false) } 
 
} 
 

 
ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.3/knockout.validation.min.js"></script> 
 
Country <input data-bind="textInput: country"><br><br> 
 
Phone <input data-bind="textInput: phone"><br><br> 
 
<button data-bind="click: isValid">Show Errors</button> 
 
<button data-bind="click: clear">Clear</button>

+0

Pas tout à fait, si dire que je choisis le Canada Je ne veux pas ce que je mets à comparer contre le modèle Par exemple, si je tape le Canada I Je veux que mon numbe pourri soit quelque chose comme 42-526-45a. –

+0

Fondamentalement, je ne peux pas avoir un vide –

+0

mis à jour. maintenant «téléphone» est nécessaire tout le temps, mais le modèle est seulement pour les États-Unis – Jag