2016-04-13 15 views
2

Bunun kolay bir yol olduğuna inanıyorum, ancak google'da birkaç saat aradıktan sonra herhangi bir cevap bulamadım (belki de doğru kelimeleri kullanamadım) arama :-P)Giriş metninde "post accent" ifadesinin nasıl önleneceği

Ben aşağıdaki kodu görülebileceği gibi, sayılar dışındaki karakterler ile metin kutusu doldurmak için engeller bir javascript yöntemi var ve bu KeyDown olayı kullanılır:

function checkNumberInput(e) { 
    // Allow: backspace, delete, tab, escape, enter and . 
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 || 
     // Allow: Ctrl+A, Command+A 
     (e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true)) || 
     // Allow: home, end, left, right, down, up 
     (e.keyCode >= 35 && e.keyCode <= 40)) { 
    // 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(); 
    } 
} 

Sorun, kullanıcı ikinci bir tuşa "bekleten" (~ ´`^gibi) aksanlı karakterler yazıyorsa, hemen sonra bir sayı yazıldığında metin kutusunda görünür. Örneğin

:

a) types 1 => [1________] 
b) types ~ => [1________] 
c) types 3 => [1~3______] 

nasıl bu oluyor engelleyebilirim? Şimdiden teşekkürler.

+2

ne de keyUp olay eklemek olur? –

+1

keyUp olayının sonunda, sayısal olmayan karakterler için girdinin 'value' özelliğini tarayabilir ve bulursanız bunları kaldırabilirsiniz; Belki de setTimeout() işlevini kullanarak, 'değer' özelliğinin kontrolünü tuşlayarak birkaç milisaniye çalıştırırsınız ... –

+0

@ Al.G kullanılır. yöntem keyUp ile ittifak etti ve hile yaptı. \t \t "Yazma silme" efektini kaldırmak istedim, ancak bunun imkansız olduğunu düşünüyorum. Yardımlarınız için hepinize teşekkür ederim! – thiagoprzy

cevap

3

' ve a'un а́'a dönüştürüldüğü anlamına mı geliyor? Bu sistemde yerleşiktir, bunu değiştiremezsiniz.
Yapabilecekleriniz, bundan sonra girişi kontrol etmektir. Ayrıca fare ile hamur engelleriz Bu şekilde:

$('input').on('keydown', checkNumberInput).on('blur focus', function(){ 
    var val = $('input').val(); 

    // now remove everything that is not allowed 
    val = val.replace(/[^0-9.]+/g, ''); 

    $('input').val(val); 
}) 

gerçekten anlık düzeltme Hakkında

https://jsfiddle.net/5afwdhzx/

(tam uygulama sadece neler olduğunu göstermek için, Deffinitely mükemmel değil) - bunu vermek Bir adı kapatıp, @Raroldo'nun yukarıda belirttiği gibi, kısa bir gecikmeyle keyDown işlevinin içine çağır.

https://jsfiddle.net/5afwdhzx/1/

+0

" Yazma silme "efektini kaldırmak istedim ama sanırım imkansız değil mi? Pekala, yaptığım tek değişiklik aksan rightaway'ini çıkarmak için olayı "bulanık odak" dan "anahtar" a çevirdi. Yardım ettiğin için teşekkür ederim! – thiagoprzy

+0

@thiagoprzy Yanıtı düzenledi, şimdi beklendiği gibi çalışmalı. –