ngFormBuilder icon indicating copy to clipboard operation
ngFormBuilder copied to clipboard

custom validation on currency component not working (and some more)

Open StefanHoutzager opened this issue 7 years ago • 0 comments

F.e. var amount = parseFloat(input.replace(','').replace('.',',')); valid = (amount >= 1000 && amount <= 100000) ? true : 'Amount should be between 1,000 en 100,000';

tested with http://codepen.io/travist/full/xVyMjo/

ngFormBuilder-full.js:75402 Uncaught TypeError: Cannot read property 'charAt' of undefined at HTMLInputElement. (ngFormBuilder-full.js:75402) at HTMLInputElement.dispatch (ngFormBuilder-full.js:54864) at HTMLInputElement.elemData.handle (ngFormBuilder-full.js:54676) ngFormBuilder-full.js:26005 TypeError: Cannot read property 'data' of undefined at ctrl.$validators.custom (ngFormBuilder-full.js:78009) at ngFormBuilder-full.js:40137 at forEach (ngFormBuilder-full.js:11905) at processSyncValidators (ngFormBuilder-full.js:40136) at Object.$$runValidators (ngFormBuilder-full.js:40108) at ngModelWatch (ngFormBuilder-full.js:40424) at Scope.$digest (ngFormBuilder-full.js:29491) at Scope.$apply (ngFormBuilder-full.js:29769) at ngFormBuilder-full.js:31616 at completeOutstandingRequest (ngFormBuilder-full.js:17763) (anonymous) @ ngFormBuilder-full.js:26005

Furthermore an amount with a period as last or first char could give problems and a custom validition (the one above f.e.) could give a problem when editing an amount (comma insert problem, f.e. 11,1111 after typing 111111).

My solutions:

        element.bind('keyup', function() {
        //  var data = scope.data[scope.component.key];  SHO change 03/31/2017:
        // data appears undefined sometimes, replaced by following
          var data = $('[name="' + scope.component.key + '"]')[0].value;

For last char = period:

// SHO change 03/27/2017 added to prevent error on numbers ending  or starting with a period
        element.bind('blur', blurHandler); 
        function blurHandler() {
           var data = scope.data[scope.component.key]
           var doApply = false
           // if last character is a comma
           if (data.length > 0) {
             if (data.charAt(data.length - 1) == '.') {
                if(data.length === 1) {
                  data = "0.00"
                }
                else {data = data + "00"}
                doApply = true
             }
             else if (data.charAt(0) == '.') {
               data = "0" + data
               doApply = true
             }
             if (doApply === true) {
               scope.$apply(function() {
                 scope.data[scope.component.key] = data;
               })
             }
        }

StefanHoutzager avatar Mar 31 '17 08:03 StefanHoutzager