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 将打印在文本框上,但焦点设置在文本之前,即 a。
如何处理这个。
我正在使用 Windows 7、IE9、Visual Studio 2010。
谢谢。

4

1 回答 1

0

将焦点设置到文本框末尾的最简单方法是将文本框的文本设置为自身:

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