Могут ли эти методы, связанные с событием, быть реорганизованы? - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть пара методов, которые выглядят одинаково и кажутся хорошими кандидатами на рефакторинг:

// if there is already a decimal in the value and user presses period on keyboard (190) or decimal on keypad (110) then prevent entry of that period or decimal
function oneDecimalPointOnly(e) {
    var v = $(this).val();

    if (v.indexOf('.') > -1 && $.inArray(e.keyCode, [190, 110]) > -1) { 
        e.preventDefault();
    }   
}

// if there is already a negative sign in the value and user presses minus on keyboard (189) or subtract on keypad (109) then prevent entry of that minus or subtract
function oneNegativeSignOnly(e) {
    var v = $(this).val();

    if (v.indexOf('-') > -1 && $.inArray(e.keyCode, [189, 109]) > -1) { 
        e.preventDefault();
    }   
}

Они связаны следующим образом:

$(':text').on('keydown', oneDecimalPointOnly);
$(':text').on('keydown', oneNegativeSignOnly);

Как написано,они выполняют задачу правильно, предотвращая ввод нескольких десятичных или отрицательных значений в текстовых полях.

Для рефакторинга вот что я пробовал:

function oneDecimalPointOnly(e) {       
    limitCharacterToOne(e, '.', [190, 110]);
}

function oneNegativeSignOnly(e) {
    limitCharacterToOne(e, '-', [189, 109]);
}

// if character is already in the value and user presses a key in the keyCodes array then prevent entry of that character
function limitCharacterToOne(e, character, keyCodes) {
    var v = $(this).val();

    if (v.indexOf(character) > -1 && $.inArray(e.keyCode, keyCodes) > -1) { 
        e.preventDefault();
    }   
}

Однако консоль показываетэта ошибка: enter image description here

И измененная версия не препятствует вводу нескольких десятичных или отрицательных значений в текстовые поля.

Какие изменения необходимы в измененной версиитак что это предотвращает ввод нескольких десятичных или отрицательных знаков?

1 Ответ

1 голос
/ 11 ноября 2019
function oneDecimalPointOnly(e) {       
    limitCharacterToOne(e, '.', [190, 110]) ;
 }

function oneNegativeSignOnly(e) {
   limitCharacterToOne(e, '-', [189, 109]);
}


function limitCharacterToOne(e, character, keyCodes) {
    var v = $(e.target).val();
    if (v.indexOf(character) > -1 && $.inArray(e.keyCode, keyCodes) > -1) { 
       e.preventDefault();
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...