我有一个文本框,无法在其中输入禁用字符。 #.
但是,当文本框填充了数据时,我将焦点放在文本框的中间,然后使用箭头键左右移动,然后它跳到文本框的末尾,这是有效的.
如果我也在文本框中间输入一个字符,它会再次转到末尾
$('[id$=txtClient]').keyup(function () {
EnableClientValidateButton(); // When the textbox changes, the user has the ability to validate the client
ChangeColorClient("0"); // The color is changed to white, to notify the user the client is not validated yet.
var $el = $('[id$=txtClient]'); // the text element to seach for forbidden characters.
var text = $el.val(); // The value of the textbox
text = text.split("#").join("");//remove occurances of forbidden characters, in this case #
$el.val(text);//set it back on the element
});
最佳答案
Javascript 允许您设置输入的光标位置。
我发现了两个有用的功能:
- getCaretPosition - https://stackoverflow.com/a/2897229/2335291
- setCaretPosition - https://stackoverflow.com/a/512542/2335291
解决方案可能如下所示:
function getCaretPosition (elem) {
// Initialize
var iCaretPos = 0;
// IE Support
if (document.selection) {
// Set focus on the element
elem.focus ();
// To get cursor position, get empty selection range
var oSel = document.selection.createRange ();
// Move selection start to 0 position
oSel.moveStart ('character', -elem.value.length);
// The caret position is selection length
iCaretPos = oSel.text.length;
}
// Firefox support
else if (elem.selectionStart || elem.selectionStart == '0')
iCaretPos = elem.selectionStart;
// Return results
return (iCaretPos);
}
function setCaretPosition(elem, caretPos) {
if(elem != null) {
if(elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
}
else {
if(elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
}
else
elem.focus();
}
}
}
$('[id$=txtClient]').keyup(function () {
EnableClientValidateButton(); // When the textbox changes, the user has the ability to validate the client
ChangeColorClient("0"); // The color is changed to white, to notify the user the client is not validated yet.
var $el = $('[id$=txtClient]'); // the text element to seach for forbidden characters.
var text = $el.val(); // The value of the textbox
text = text.split("#").join("");//remove occurances of forbidden characters, in this case #
var pos = getCaretPosition(this);
$el.val(text);//set it back on the element
setCaretPosition(this, pos);
});
关于javascript - 按箭头键时光标会跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17186970/