Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Запретить ввод букв в input, не усложнил ли код ? (https://javascript.ru/forum/misc/82566-zapretit-vvod-bukv-v-input-ne-uslozhnil-li-kod.html)

alacka 26.05.2021 14:34

Запретить ввод букв в input, не усложнил ли код ?
 
Здравствуйте, читал что новачки усложняют код, а так как я новичок
хотел спросить не усложнил ли я код, и какое решение попроще

Задача

в input разрешить вводить только цифры, буквы удалять при вводе

const maskDate = document.querySelector('.head-checker__mask-date');

maskDate.addEventListener('keyup', () => {
    let str = maskDate.value;
    let cur = "";
    
    for (let i = 0; i < str.length; i++){        
        if(!isNaN(str.charAt(i))) {
            cur += str.charAt(i);
        }
    }

    maskDate.value = cur;
})

Alexandroppolus 26.05.2021 14:43

На самом деле всё "немного" сложнее.
Во первых, надо обрабатывать не 'keyup', а 'input', чтобы охватить всякие изменения, например копи-паст мышкой, драгндроп текста и прочая.
Во вторых, текст может редактироваться где-то в середине, и после поправки надо вернуть курсор на место (присвоение нового value перекидывает его в конец).
Может быть ещё что-то.

В общем, если это тебя для развития, то экспериментируй, если в проекте срочно понадобилось, лучше взять готовый.

Ну а удалить не-цифры проще регуляркой: const cur = maskDate.value.replace(/\D/g, '')

alacka 26.05.2021 14:47

Цитата:

Сообщение от Alexandroppolus (Сообщение 537173)
На самом деле всё "немного" сложнее.
Во первых, надо обрабатывать не 'keyup', а 'input', чтобы охватить всякие изменения, например копи-паст мышкой, драгндроп текста и прочая.
Во вторых, текст может редактироваться где-то в середине, и после поправки надо вернуть курсор на место (присвоение нового value перекидывает его в конец).
Может быть ещё что-то.

В общем, если это тебя для развития, то экспериментируй, если в проекте срочно понадобилось, лучше взять готовый.

Ну а удалить не-цифры проще регуляркой: const cur = maskDate.value.replace(/\D/g, '')


пока изучаю )) спасибо, буду думать



Ну а удалить не-цифры проще регуляркой: const cur = maskDate.value.replace(/\D/g, '')

блин только 1 строчка ))))))))

ksa 27.05.2021 10:25

Цитата:

Сообщение от alacka
читал что новачки усложняют код

И еще не делают полные тестовые примеры... :D
Ты ведь только JS показал... А хтмля нету. :(


Часовой пояс GMT +3, время: 19:11.