为什么IE 8会让光标跳转到这个JS的textarea的末尾?

时间:2011-08-01 13:25:54

标签: javascript internet-explorer cursor textarea

http://jsfiddle.net/tYXTX/

在Firefox中,使用上面的脚本(包含在下面内联),您可以通过单击字符串中间并键入或使用键盘后退键(以及ctrl +左箭头)随时编辑textarea的内容。 。

在IE中,光标始终跳到最后。为什么会这样,我该如何预防呢?


HTML:

<textarea id="bob" name="bob">Some textarea content</textarea>
<div id="debug"></div>

JS:

$(document).ready(function(){
    $("#bob").keyup(function(){
        $("#bob").val($("#bob").val().substring(0,160));
        $("#debug").append("\n+");
    }); 
});

2 个答案:

答案 0 :(得分:3)

我猜IE清理文本框值然后插入新文本。结果,插入位置丢失了。

您可以做的是将插入符位置保存在内存中并在设置值后恢复它:http://jsfiddle.net/pimvdb/tYXTX/3/

$(document).ready(function(){
    $("#bob").keyup(function(){
        var caretPosition = $("#bob").prop("selectionStart"); // caret position

        $("#bob").val($("#bob").val().substring(0,160));

        $("#bob").prop({selectionStart: caretPosition,   // restore caret position
                        selectionEnd:   caretPosition});
        // if start == end, it defines the caret position as selection length == 0

        $("#debug").append("\n+");
    }); 
});

答案 1 :(得分:3)

不是每次都使用substring()截断$(“#bob”),而是仅在文本长度大于160时才执行此操作:

$(document).ready(function(){
    var oldtext = $("#bob").val();

    $("#bob").keyup(function(){
        if( $("#bob").val().length > 160 )
            $("#bob").val(oldtext);
        else
            oldtext = $("#bob").val();

        $("#debug").append("\n+");
    });
});

在IE中,只要<textarea>被修改,光标就会跳到最后。