Можно ли «отключить» клавишу точки в числовом поле HTML с помощью программной клавиатуры Android в приложении Android Web View html5? - PullRequest
1 голос
/ 14 февраля 2020

Когда я проверяю коды клавиш на программной клавише для . - , e.key в JavaScript равно «Неопознано» и e.keyCode для всех этих символов - 229.

Устройство, которое я использую, является сканером TC52k, и триггер сканирования имеет тот же ключ и код ключа ... поэтому его нельзя полностью отключить.

Я не знаю, сколько я пробовал вещей, которые не работали ... но я опубликую некоторые ...

Это динамическое c поле, связанное заклепками. js с использованием JSON objects

$(document).on("keydown", ".qty-input", function(e) {
    let code = e.keyCode;
    if (code == 229 && $(this).val().charAt(str.length - 1) == ".") {
        $(this).val($(this).val().slice(0, -1));
    }
});

^ По сути, это говорит о том, что если последний символ имеет код 229, а последним символом введенной строки является «.», То обрезать последний символ ... но не работает правильно.

Я также сделал это, что в основном говорит о том, чтобы принимать только клавиши с кодами клавиш между 48 и 57, которые являются клавишами 1-9 на программной клавиатуре android.

<input class="qty-input" placeholder="0" type="number" min="0" step="1" onkeypress="return event.charCode >= 48 && event.charCode <= 57 && event.keyCode != 229" pattern="[0-9]*" autofocus>

Также не сделал ' t работа ...

Кто-нибудь имеет опыт с этим и может помочь? Я знаю, что есть много нерешенных сообщений об этом в Интернете. Это последнее, что я должен сделать, и это не позволяет моему приложению быть развернутым!

Также ... Я попробовал эту функцию, используя события: keyup, keydown, change, input и keypress ...

1 Ответ

1 голос
/ 18 февраля 2020

Вот лучший обходной путь, который я нашел (так как 229 также запускает триггер «сканера», я должен определить, содержит ли строка штрих-код и количество, и придется ли их разделять (ключ-код для [.] снова совпадает с keyCode для триггера сканера)) 2 условия определяют 2 вещи:

Если значение больше 3, то оно не допускается как количество, так как количество не может быть больше ' 500 ', поэтому если его длина больше 5, он считается штрих-кодом.

let oldVal = '';
let newVal = '';
let barcode = '';
$(document).on("keydown", "input.received-qty", function(e) {
    let code = e.keyCode || e.which || e.charCode;
    oldVal = $(this).val();
});

$(document).on("keyup", "input.received-qty", function(e) {
    let code = e.keyCode || e.which || e.charCode;
    newVal = $(this).val();
    if (code == 229 && e.target.value.length >= 3) {
        barcode = $(this).val().slice(oldVal.length - 1, -1);
        $(this).val(oldVal);
    } else if (code == 229 && e.target.value.length <= 3) {
        let x = oldVal.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, "");
        $(this).val('');
        $(this).val(x);
    }
    console.log("oldVal : ", "[", oldVal, "]", "newVal : ", "[", $(this).val(), "]");
});

Это лучший способ, который я пробовал до сих пор.

...