ris-input-number-string.js 2.03 KB
Newer Older
eddie.woo's avatar
eddie.woo committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
/*
 * @description:
 * only can input number [0-9] string and backspace, 
 * but Allow: backspace, delete, tab, escape, enter, Ctrl+A, home, end, left, right
 * 
 * @usage:
 * <div ris-input-number-string>
 * 
 */

commonModule.directive("risInputNumberString", function () {
    'use strict';
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            element.on("keydown", function (e) {
                // Allow: backspace, delete, tab, escape, enter and .
                if (_.contains([46, 8, 9, 27, 13, 110], e.keyCode) ||
                    // Allow: Ctrl+A
                    e.ctrlKey === true && _.contains([65, 67, 86, 88], e.keyCode) ||
                    // Allow: home, end, left, right
                    (e.keyCode >= 35 && e.keyCode <= 39)) {
                    // let it happen, don't do anything
                    return;
                }
                // Ensure that it is a number and stop the keypress
                if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
                    e.preventDefault();
                }
            });
            element.on("paste", function (e) {
                var text = (e.originalEvent || e).clipboardData.getData('text/plain');
                if (text && !text.match(new RegExp("^\\d*$"))) {
                    e.preventDefault();
                }
            });
            element.on("change", function () {
                if (attrs.risInputNumberString === 'LargerThanZero' && this.value === '0') {
                    this.value = '';
                }
            });
            element.on("dragenter", function () {
                return false;
            });
            element.on("dragover", function () {
                return false;
            });
            element.on("dragleave", function () {
                return false;
            });
            element.on("drop", function (e) {
                e.preventDefault();
                return false;
            });
        }
    };
});