最近、テキストボックスに入力したときにすべての表示文字をキャプチャすることを含む、対処するのが最も難しいという珍しい要求がありました。設定は次のとおりです。
最大長が10文字のテキストボックスがあります。ユーザーが10文字を超えて入力しようとすると、文字数の制限を超えて入力していることをユーザーに通知する必要があります。
最も簡単な解決策は、最大長を11に指定し、すべてのキーアップで長さをテストし、10文字に切り捨てることですが、この解決策は少し厄介なようです。私がやりたいのは、キーアップの前にキャラクターをキャプチャし、それが表示キャラクターであるかどうかに応じて、ユーザーに通知を提示し、デフォルトのアクションを防ぐことです。
多くの国際データを処理するため、ホワイトリストは難しいでしょう。
keydown、keypress、 keyupのすべての組み合わせを試し、 event.keyCode、event.charCode、event.whichを読み取りましたが、すべてのブラウザーで機能する単一の組み合わせを見つけることができません。私が管理できる最善の方法は、> = IE6、Chrome5、FF3.6で正しく機能するが、Operaでは失敗する次のことです。
注:次のコードはjQueryを利用しています。
$(function(){
$('#textbox').keypress(function(e){
var $this = $(this);
var key = ('undefined'==typeof e.which?e.keyCode:e.which);
if ($this.val().length==($this.attr('maxlength')||10)) {
switch(key){
case 13: //return
case 9: //tab
case 27: //escape
case 8: //backspace
case 0: //other non-alphanumeric
break;
default:
alert('no - '+e.charCode+' - '+e.which+' - '+e.keyCode);
return false;
};
}
});
});
私がやっていることはおそらくソリューションを過剰に設計していることを認めますが、私はそれに投資しているので、ソリューションについて知りたいと思います。