2012-02-07 86 views
0

我有一个textarea,里面有很多文字,我有代码,当你按下Shift + Enter时,它会插入一段文字。但是,目前,只要发生这种情况,文本会滚动,以便在屏幕底部留下插入符号。停止跳转到textarea底部?

我插入代码:

$("#body textarea").bind('keydown', function(event) { 
    var caret = $("#body textarea").caret(); 
    if(event.keyCode == 13 && event.shiftKey) 
    { 
     var text = "[br]" 
     insertText("#body textarea", caret.start, caret.end, text, ""); 
     $("#body textarea").caret(caret.start+(text.length), caret.start+(text.length)); 
    } 
}); 

有谁知道我能做些什么来阻止它强迫插入符号的底部?

干杯
BlackWraith

+0

你能重现bug在[的jsfiddle(http://jsfiddle.net)? – 2012-02-07 23:31:20

+0

@MyHeadHurts:抱歉,延迟,它不想玩得很好,但继承人的例子。注意,如果向下滚动,它只会跳到底部 – 2012-02-08 00:30:41

回答

2

我在stackoverflow.com同样的麻烦发现,使样品你 http://jsfiddle.net/deerua/WAZBQ/

+0

这看起来很适用,谢谢:) – 2012-02-08 00:34:38

+0

然而,就像一个笔记,我希望得到一个jQuery的答案,这是更多的JavaScript比jquery ...只是说。谢谢,它仍然会做我想要的:) – 2012-02-08 00:35:19

0

您可以在插入文本后,手动设置插入符的位置:

http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/

function doGetCaretPosition (ctrl) { 
    var CaretPos = 0; // IE Support 
    if (document.selection) { 
    ctrl.focus(); 
     var Sel = document.selection.createRange(); 
     Sel.moveStart ('character', -ctrl.value.length); 
     CaretPos = Sel.text.length; 
    } 
    // Firefox support 
    else if (ctrl.selectionStart || ctrl.selectionStart == '0') 
     CaretPos = ctrl.selectionStart; 
    return (CaretPos); 
} 

function setCaretPosition(ctrl, pos){ 
    if(ctrl.setSelectionRange) 
    { 
     ctrl.focus(); 
     ctrl.setSelectionRange(pos,pos); 
    } 
    else if (ctrl.createTextRange) { 
     var range = ctrl.createTextRange(); 
    range.collapse(true); 
     range.moveEnd('character', pos); 
     range.moveStart('character', pos); 
     range.select(); 
    } 
} 

Ctrl为您的textarea元素。

setCaretPosition(document.getElementById("textarea", 0);