2

たとえば、入力テキストフィールドの入力をフィルタリングしています。

また、数字以外の文字を削除するように、入力をその場でフィルタリングしています。

$("#txtlevel").bind('keyup', function(evt)
{
    var value = $(this).val();
    value = value.replace(/\D/g, '');   /* Remove any non-digit characters */
    if ( value.length > 1 )
    {
        value = value.replace(/^[ 0]/g,'');   /* Remove any leading spaces or zeros */
    }
    $(this).val(value);
}

これはFirefoxでうまく機能しますが、IEとChromeでは、カーソルが毎回入力フィールドの最後にジャンプします。これを防ぐ、またはカーソル位置をリセットするにはどうすればよいですか?テキストフィールドに対してそれを行うコードを見ましたが、入力テキストフィールドに対しては行いません。

4

2 に答える 2

3

キーアップを使用して正規表現置換を実行すると(つまり、を設定するとvalue)、カーソルが最後にジャンプします。数値キー(およびバックスペース、削除)のみを許可することが目標である場合は、次のことを試してください。

$("#txtlevel").bind('keydown', function(event) {
    // Allow only backspace, delete, left and right arrows, return and tab
    if (event.keyCode == 46 || 
        event.keyCode == 8 || 
        event.keyCode == 37 || 
        event.keyCode == 39 || 
        event.keyCode == 13 || 
        event.keyCode == 9) {
        // let it happen
    }
    else {
        // stop the keypress if not a number
        if (event.keyCode < 48 || event.keyCode > 57 ) {
            event.preventDefault(); 
        }   
    }
});

貼り付け時に数値以外のイベントをキャンセルするには、イベントにバインドしpasteます。

$("#txtlevel").bind('paste', function(e){ 
    var value = $(this).val();
    value = value.replace(/\D/g, '');   /* Remove any non-digit characters */
    if ( value.length > 1 ) {
        value = value.replace(/^[ 0]/g,'');   /* Remove any leading spaces or zeros */
    }
    $(this).val(value);
});
于 2011-08-15T06:21:37.050 に答える
0

カーソル位置を保存および復元できます。そうすれば、カーソルがテキストの最後にジャンプすることはありません

$("#txtlevel").bind('keyup', function(evt)
{
    var pos = evt.target.selectionStart; // Save cursor position
    var value = $(this).val();
    value = value.replace(/\D/g, '');   /* Remove any non-digit characters */
    if ( value.length > 1 )
    {
        value = value.replace(/^[ 0]/g,'');   /* Remove any leading spaces or zeros */
    }
    $(this).val(value);
    evt.target.selectionEnd = pos; // Restore cursor position
}
于 2018-03-02T12:25:50.093 に答える