4

私が取り組んでいるプロジェクトでは、ユーザーが自分の名前を入力する必要があるテキストボックスがあります。ユーザーが数字を入力するのを避けるために、 Brian Jaegerによって作成されたjquery.limitkeypress.jsライブラリを使用しました。Internet Explorer 10 で Web サイトをテストするまで、すべてが完全に機能していました。IE10 では、必要なすべての文字を入力できます。数字や奇妙な記号を思い通りに入力できませんが、スペースを入力してから文字を入力すると、文字がスペースの右に表示され、スペースが消えて後者が左に移動します。奇妙なことに、スペースを入力してから 30 秒ほど待って文字を入力すると、問題なく動作します。

4

2 に答える 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 に答える