0

要件があります。テキスト ボックスには最大 50 文字を含めることができます。これを実現するために、preventDefault を指定しました。

if (!(event.ctrlKey && (event.which == 65 || event.which == 86 || event.which == 67 || event.which == 88))
                && (!(event.shiftKey && (event.which == 35 || event.which == 36)))
                && (key != 8 && key != 37 && key != 39 && key != 46 && key != 36 && key != 35 && key != 33 && key != 34)) {
                    event.preventDefault();
                }

しかし、ここでの要件は次のとおりです。ctrl+a を押してから abc を押すと、テキストからすべてを消去して abc を出力する必要があります。
これを達成するために、私はこのコードを書きました->

var focusItem = $('<input type="text">');
     function getSelText() {
              var txt = '';
              //IE
        var focusItem = $('<input type="text">');
         if (document.selection != undefined) {
             focusItem.focus();
             var sel = document.selection.createRange();
             var rangeParent = sel.parentElement();
             txt = sel.text;
             if (!(event.ctrlKey && (event.which == 65 || event.which == 86 || event.which == 67 || event.which == 88))
             && (!(event.shiftKey && (event.which == 35 || event.which == 36)))
             && (key != 8 && key != 37 && key != 39 && key != 46 && key != 36 && key != 35 && key != 33 && key != 34)) {
             //event.preventDefault();
            if (txt.length > 0 && ((key >= 65 && key <= 90) || (key >= 48 && key <= 57) || (key >= 97 && key <= 122))) {
                sel.text = String.fromCharCode(key).toLowerCase();
                }
                txt = sel.text;
             }
          }                        
          return txt;
       }

今はうまくいっていますが.. ctrl+a abcを押すと、bcaとして出力されます。何が起こっているのですか:ctrl + aの後にaを押すと、テキストボックスにaが印刷されますが、テキストの前にフォーカスが設定されます。
これに対処する方法。
Windows 7、IE9、Visual Studio 2010 を使用しています。
ありがとうございます。

4

1 に答える 1

0

フォーカスをテキストボックスの最後に設定する最も簡単な方法は、テキストボックスのテキストをそれ自体に設定することです:

focusItem.val(focusItem.val());
于 2012-09-26T05:29:53.250 に答える