【问题标题】:conditional validation in Knockout淘汰赛中的条件验证
【发布时间】:2017-07-19 14:11:11
【问题描述】:

我正在尝试为电话号码添加验证,

我需要它是必需的,但我只希望在国家是美国时强制执行该模式 这就是我所拥有的,但是当我选择加拿大或任何其他国家/地区时它会失败

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})$/
        }
    });

【问题讨论】:

    标签: knockout.js knockout-2.0 knockout-validation


    【解决方案1】:

    非常简单。只需将相同的onlyIf 条件添加到pattern 验证器

    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>

    【讨论】:

    • 不完全,如果说我选择加拿大,我不希望我输入的内容与模式进行比较例如,如果我输入 Canada,我希望我的 numbe rot 类似于 42-526-45a。
    • 基本上我不能有空白
    • 已更新。现在phone 一直是必需的,但模式仅适用于美国
    猜你喜欢
    • 2012-02-18
    • 2015-02-28
    • 2011-08-09
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多