テキスト入力フォームで、英数字のみ入力できるよう、下記のhtmlを組みました。
<input type="text" name="text" value="" onKeyup="this.value=this.value.replace(/[^0-9a-zA-Z]+/,'')>
Firefoxは問題なく動作していますが、ChromやSafariでは困った現象が起きました。
テキストフォームに文字列を入力し、文字列の真ん中辺りを一文字消すと、自動的に入力カーソルが文字列の末尾に移動してしまいます。
例えば、文字列"abcde"と入力し、入力カーソルを"c"と"d"の間に移動して、Backspaceキーで一文字削除すると、文字列は"abde"となりますが、入力カーソルは自動的に"e"の後ろに移動します。
入力カーソルが自動的に移動してしまっては、続けて2文字、3文字と削除したいときに、とても不便です。
キーボードを操作するごとにonkeyupのreplace処理が働いて、入力カーソルが自動的に移動しているのではと思いますが、それでは困ってしまいます。
もし、この対策や他の方法があれば教えていただけないでしょうか。
どうぞよろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
とりあえずであれば
if(this.value.match(/\W/)) this.value=this.value.replace(/\W/,'')
のような処理をすればよいような気がしますが
これでもreplaceした時点でカーソルが移動してしまいます
ちょっと複雑ですが、以下のような処理をいれると
カーソルを強制的に元の位置に戻します
<script>
try{
document.addEventListener('keyup',function(e){keyupfunc(e)},true);
}catch(e){
document.attachEvent('onkeyup',function(e){keyupfunc(e)});
}
function keyupfunc(e){
var t = (e.srcElement || e.target);
var v=t.value;
var r = new RegExp("\\W");
if(t.nodeName!="INPUT" || t.type!="text" || t.name!="text") return true;
if(window.getSelection){
window.getSelection();
var p = t.selectionStart;
if(v.match(r)){
t.value=v.replace(r,"");
t.setSelectionRange(p-1,p-1);
}
}else{
//IE対策
var range = document.selection.createRange();
range.moveStart("character", - v.length );
var p = range.text.length;
if(v.match(r)){
t.value=v.replace(r,"");
range.collapse();
range.moveEnd("character",p -1);
range.moveStart("character",p -1);
range.select();
}
}
}
</script>
<input type="text" name="text" value="">
No.1
- 回答日時:
カーソルを操作する API がありますので、処理前後の位置を調整することができます
http://www.w3.org/TR/html5/forms.html#textFieldS …
他の方法としては
keypress 時に入力イベント自体を無かったことにする
https://developer.mozilla.org/ja/docs/Web/API/Ke …
HTML5 で導入された pattern 属性を使う (使えるのならば)
http://www.w3.org/TR/html5/forms.html#the-patter …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- iPad これまでタブレットは何台使ったか数え切れないほどですが、今回iPadを初めて手に入れました。 全体的 5 2022/08/07 18:34
- iPhone(アイフォーン) スマホ文字消しにくい 3 2023/07/27 15:23
- Visual Basic(VBA) VBA 画面上のカーソルに文字数字を入力するコードを教えて下さい 1 2022/10/30 10:31
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- iPhone(アイフォーン) iphoneの文字入力 フリック入力をよく使っています。 空白が全角なのが気になる点、 空白長押しで 1 2022/06/28 17:49
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA テキストボックス...
-
テキストボックスの番号を使っ...
-
教えて!全角文字「μ」の半角
-
excel vba でユーザーフォーム...
-
EXCEL VBA で指定した範囲に入...
-
Excel-VBAでInputBox+Pulldown...
-
c#でTextBoxの入力制限
-
初歩的な事だと思います。 Sub...
-
数字以外の入力をエラーにする...
-
入力フォームの値をQRコードで...
-
accessで該当するレコードがな...
-
FIREFOXでWebページを表示でき...
-
アクセスのマクロ
-
VBA R1C1形式で変数の入力について
-
VBAの質問になります メッセー...
-
エディットボックスの入力制限...
-
TextBoxから数字が文字...
-
フォームの入力項目に全角文字...
-
正規表現で2回以上連続する文字...
-
インプットボックスでの日付入力
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA テキストボックス...
-
テキストボックスの番号を使っ...
-
VBAで質問があります
-
Windowsのアプリ開発ってなんの...
-
Excel-VBAでInputBox+Pulldown...
-
EXCEL VBA で指定した範囲に入...
-
初歩的な事だと思います。 Sub...
-
数字以外の入力をエラーにする...
-
VBAでInputBoxの再入力をさせる...
-
入力フォームの値をQRコードで...
-
excel vba でユーザーフォーム...
-
TextBoxから数字が文字...
-
VBAの質問になります メッセー...
-
DataGridViewの桁数制限に関して
-
accessで該当するレコードがな...
-
c#でTextBoxの入力制限
-
VBA R1C1形式で変数の入力について
-
エディットボックスの入力制限...
-
「イ分」・・・フンという文字...
-
アルファベットGの小文字の入力
おすすめ情報