在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+");
});
});
答案 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>
被修改,光标就会跳到最后。