É possível a chave período de "desativar" em um campo de número HTML usando um teclado virtual Android em um aplicativo HTML5 Android Web View?

votos
0

Quando eu verificar os códigos de tecla na softkeyboard 'para [.] [-] [], o e.key em JavaScript é não identificado eo e.KeyCode é 229 para todos os personagens.

O dispositivo que estou usando é um scanner TC52k eo gatilho de digitalização tem a mesma chave e keyCode ... por isso não pode ser completamente desativado.

Eu não sei quantas coisas eu tentei que não funcionou ... mas vou postar algumas ...

Este é um campo dinâmico binded com rivets.js usando objetos JSON

$(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));
    }
});

^ Basicamente, que diz que, se o último caractere tem o código 229 e o último caractere da cadeia introduzida é um '', em seguida, corte o último caractere off ... mas não funciona corretamente.

Eu também fiz isso que diz, basicamente, apenas para aceitar chaves que têm keycodes entre 48 e 57 que são chaves 1-9 sobre o teclado virtual do 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>

Também não funcionou ...

Alguém tem experiência com isso e pode ajudar? Eu sei que há muitos posts não resolvidos sobre este online. É a última coisa que eu tenho que fazer e seu manter meu aplicativo seja implantado!

Também ... Eu tentei estas funções usando eventos: keyup, keydown, de mudança, de entrada e keypress ...

Publicado 13/02/2020 em 22:06
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Aqui é a melhor solução que eu encontrei (desde 229 também aciona o gatilho 'scanner, tenho para detectar se uma string inclui um código de barras e uma quantidade e terá de separar os dois (o código de acesso para um [.]novo é o mesmo que o keyCode para o gatilho scanner)) os 2 condições determinam 2 coisas:

Se o valor for maior do que 3, então não é permitido como uma quantidade porque a quantidade não pode ser mais '500', de modo que quando se tem um comprimento maior do que 5, ele é considerado como um código de barras.

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(), "]");
});

Esta é a melhor maneira que eu tentei até agora.

Respondeu 18/02/2020 em 19:35
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more