我有一个要求:一个文本框最多可以有 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。
谢谢。