我有一些代码可以将用户键入的任何下划线替换为10个下划线的字符串。这是一个简单的正则表达式替换。问题是,在替换之后光标跳到textarea的末尾(至少在Firefox中)。所以,我决定通过selectionStart存储光标位置。请参阅下面的代码段。
var start = textarea.selectionStart;
if (enteredChar == "_")
{
var replaced = textarea.value.replace(/_+/g, "__________");
if (replaced.length <= 255)
{
textarea.value = replaced;
alert("Setting selection range to " + (start + 9) + ", " + (start + 9));
// Jump to the end of the newly inserted underscore string.
textarea.setSelectionRange(start + 9, start + 9);
}
}
上面的代码工作正常。警报正在吐出正确的位置,光标随后跳到该位置。问题是,一旦我删除警报,它就不再有效。光标跳转到textarea的末尾。所以,如果我做这样的事情:
INPUT:
ABCDE(insert an underscore here)FGHIJ
EXPECTED RESULT:
ABCDE__________(cursor ends up here)FGHIJ
ACTUAL RESULT:
ABCDE__________FGHIJ(cursor ends up here)
更奇怪的是,如果我手动输入位置(例如textarea.setSelectionRange(10,10)),光标移动到那个位置就好了。怎么可能?传递文字但不传递变量时为什么会起作用?警告变量显示预期的数字。而且,它与警报一起工作,但不是没有它。
Javascript太奇怪了。 :P