在正则表达式替换时,Javascript光标跳到textarea的末尾

时间:2014-03-02 05:18:47

标签: javascript html regex

我有一些代码可以将用户键入的任何下划线替换为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

0 个答案:

没有答案