2012-02-07 50 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);