私が取り組んでいるプロジェクトでは、ユーザーが自分の名前を入力する必要があるテキストボックスがあります。ユーザーが数字を入力するのを避けるために、 Brian Jaegerによって作成されたjquery.limitkeypress.jsライブラリを使用しました。Internet Explorer 10 で Web サイトをテストするまで、すべてが完全に機能していました。IE10 では、必要なすべての文字を入力できます。数字や奇妙な記号を思い通りに入力できませんが、スペースを入力してから文字を入力すると、文字がスペースの右に表示され、スペースが消えて後者が左に移動します。奇妙なことに、スペースを入力してから 30 秒ほど待って文字を入力すると、問題なく動作します。
2 に答える
1
申し訳ありませんが、数年間そのプラグインを更新していませんが...
jquery.limitkeypressが IE9+ で動作するようになりました。選択の決定方法に問題がありました。
IE11はdocument.selectionのサポートを終了しましたが、使用されているブラウザーをテストするために使用していたdocument.setSelectionRangeを保持しました...
IE9 で document.selectionStart と document.selectionEnd が有効になったので、IE の人々が使用しているブラウザーのバージョンを直接確認するようになりました...
IEのバージョンを確認するためにこれを追加しました:
var ie = (function(){
var undef,
v = 3,
div = document.createElement('div'),
all = div.getElementsByTagName('i');
while (
div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
all[0]
);
return v > 4 ? v : undef;
}());
したがって、私の選択関数は次のようになります。
function getSelectionStart(o) {
if (ie < 9) {
var r = document.selection.createRange().duplicate()
r.moveEnd('character', o.value.length)
if (r.text == '') return o.value.length
return o.value.lastIndexOf(r.text)
} else return o.selectionStart
}
function getSelectionEnd(o) {
if (ie < 9) {
var r = document.selection.createRange().duplicate()
r.moveStart('character', -o.value.length)
return r.text.length
} else return o.selectionEnd
}
于 2016-03-03T22:18:17.473 に答える