2017-02-13 33 views
0

我創建了一個自定義的subscribable函數,可以將電話號碼格式化爲xxx-xxx-xxxx格式,並且效果非常好。但是,必須添加一個新約束,以便如果用戶鍵入的值超過11位數字,則不應格式化該數字。你能告訴我爲什麼這個代碼仍然格式化輸入超過11位數字嗎?定製Knockout可訂閱功能

ko.subscribable.fn.formatPhoneNumber = function() { 
     return ko.computed({ 
      read: function() { 
       if (this().length > 11) { 
        return this(); 
       } else { 
        return this() 
         .replace(/\D+/g, "") 
         .replace(/^[01]/, "") 
         .replace(/(\d{3})(\d{3})(\d{4})/, "$1-$2-$3") 
         .substring(0, 12); 
       } 
      }, 
      write: function (value) { 
       if (this(value).length > 11) { 
        this(value); 
        this.valueHasMutated(); 
       } else { 
        this(value.replace(/\D+/g, "") 
         .replace(/^[01]/, "") 
         .replace(/(\d{3})(\d{3})(\d{4})/, "$1-$2-$3") 
         .substring(0, 12)); 
        this.valueHasMutated(); 
       } 
      }, 
      owner: this 
     }).extend({ notify: 'always' }); 
    }; 
+0

我以爲格式的電話號碼似乎是不足夠通用的,添加到'subscribable'。 – Agalo

回答

0

這似乎是一個邏輯上的錯誤在這裏:

if (this(value).length > 11) { ... 

IMO應該是:

if (value.length > 11) { ... 
+0

謝謝!完美工作! –