سؤال

لدي مخصص التوجيه ، المرشحات على ng-نموذج المدخلات, أن يقيد المدخلات فقط إلى الأرقام:

     .directive('onlydigitinput', function () {
    return {
        require: 'ngModel',
        link: function (scope, element, attrs, modelCtrl) {
            modelCtrl.$parsers.push(function (inputValue) {
                var transformedInput = inputValue.toLowerCase().replace(/ /g, '')
                  .replace(/[^0-9]+/g, '');
                if (transformedInput != inputValue) {
                    modelCtrl.$setViewValue(transformedInput);
                    modelCtrl.$render();
                }
                return transformedInput;
            });
        }
    };
})

يعمل كبيرة وحدها ، ولكن تستخدم جنبا إلى جنب مع ، على ما يبدو ، معيار التوجيه المطلوبة ، يبدأ الفشل.

يمكنني استخدام HTML التالية (اليشم الجملة):

input(type='text' , required, onlydigitinput,  min='1', max='99', maxlength='2')

(أنا لا تستخدم type='عدد' كما أنه عبث مع maxlength: maxlength تجاهل نوع الإدخال="عدد" في كروم, كما يتجاهل بلدي التوجيه)

عندما كنت أدخل أرقام, أنه يعمل بشكل جيد.الحقل صالح.عندما أحاول أن أدخل الرقم ثم بعض الرسالة, أنه يعمل بشكل جيد:الحقل صالح ، وأنا لا يمكن أن يدخل غير أرقام.ولكن عندما أبدأ من غير رقم حقل غير صالح ولكن لا يزال يمكنني أن أدخل الحروف التي يرافقه الخطأ التالية:

TypeError: Cannot read property 'toLowerCase' of undefined
at http://localhost:3000/scripts/core/directives/systemDirectives.js:63:54

في اشارة الى استخدام toLowerCase في التوجيه أعلاه.يرجى تقديم المشورة كيف يمكن مسح هذا الخطأ و جعل بلدي التوجيه أداء جيدا أيضا في الحالة الأخيرة ، وتجنب الخطأ.

هل كانت مفيدة؟

المحلول

لديك حقل مطلوب المصادقة على حقل الإدخال.ومن ثم عند تعيين الحقل إلى قيمة فارغة("") - يحدث عند كتابة غير أرقام.تصبح قيمة غير معرف.

var transformedInput = inputValue.toLowerCase().replace(/ /g, '')
              .replace(/[^0-9]+/g, '');
            if (transformedInput != inputValue) {
                modelCtrl.$setViewValue(transformedInput);
                modelCtrl.$render();
            }

إضافة أدناه على رأس البرمجية أعلاه:

if(!inputValue) return ;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top