2016-04-13 11 views
2

私はこれは簡単なものだと信じていますが、Googleで数時間の検索をしても何の答えも見つけられませんでした(多分正しい単語を使用できませんでした検索:-P)入力テキストに「ポストアクセント」を防ぐ方法

は、私はそれが以下のコードに見られるように、数字以外の文字をテキストボックスを埋めるために、ユーザーを防ぐJavaScriptのメソッドを持っており、それがKeyDownイベントで使われています:

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

問題は、ユーザーが2番目のキー(〜 '^ ^など)を「待つ」アクセント文字を入力すると、直後に数字を入力するとテキストボックスに表示されるということです。例えば

:私はこれを防ぐにはどうすればよい

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

?前もって感謝します。

+2

また、keyUpイベントを追加するとどうなりますか? –

+1

keyUpイベントの終わりに、非数値文字に対して入力の 'value'プロパティをスキャンし、見つかった場合はそれらを削除することができます。 keyUpの後に数ミリ秒実行される 'value'プロパティのチェックをスケジュールするために 'setTimeout()'を使うことができます。 –

+0

私は@ Al.Gを使用しました。メソッドはkeyUpと同盟し、それはトリックでした。 \t \t 「書き込み消去」効果を削除したかったが、不可能だと思う。助けてくれてありがとう! – thiagoprzy

答えて

3

'aа́に変換されますか? これはシステムに組み込まれているため、変更することはできません。
その後、入力を確認することができます。あなたはまた、マウスでペーストを防ぎます。この方法:

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

本当にインスタント修正について

https://jsfiddle.net/5afwdhzx/

を(正確な実装は、ちょうど何が起こっているのか説明するために、deffinitely完璧ではありません) - これを与えます@haroldoのように、名前を閉じてkeyDown関数の中で少し遅れて呼び出します。

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

+0

"書き込み消去"効果を削除したいと思っていましたが、不可能、そうですか?さて、私が作った唯一の変更は、右のアクセントを取り除くためにイベントを「ボケフォーカス」から「キーアップ」に変更することでした。ご協力いただきありがとうございます! – thiagoprzy

+0

@thiagoprzy回答が編集されました。今すぐ期待どおりに動作するはずです。 –

関連する問題