在textarea中查找光标的位置

时间:2011-08-05 17:43:51

标签: javascript jquery google-chrome

为什么这段代码不起作用?

http://sandbox.phpcode.eu/g/5db40.php

<form>
   <textarea></textarea>
</form>
<script>
$(function(){
    $("textarea").keydown(function(e){
        if (e.keyCode == 9){

                     $("textarea").selectionStart.append("    ");
                     e.preventDefault();
        }
    });
});
</script>

你必须在textarea上按TAB

问题是它没有/附加四个空格并且它默认浏览器操作(切换到Chrome中的地址选项卡)

思想?

5 个答案:

答案 0 :(得分:3)

this问题相关,请尝试:

$(function () {
    $("textarea").keydown(function (e) {
        if (e.keyCode == 9) {
            e.preventDefault();
            var $this = $(this);
            var pos = $this[0].selectionStart;
            $this.val($this.val().substring(0, pos) + "    " + $this.val().substring(pos));
            $this.setCursorPosition(pos + 4);
        }
    });
});

this帖子中添加JQuery。

new function($) {
  $.fn.setCursorPosition = function(pos) {
    if ($(this).get(0).setSelectionRange) {
      $(this).get(0).setSelectionRange(pos, pos);
    } else if ($(this).get(0).createTextRange) {
      var range = $(this).get(0).createTextRange();
      range.collapse(true);
      range.moveEnd('character', pos);
      range.moveStart('character', pos);
      range.select();
    }
  }
}(jQuery);

答案 1 :(得分:1)

为了在jQuery中操作textarea选择和插入位置,我建议使用my jQuery plug-in来执行此操作,这适用于所有主流浏览器,并提供获取和设置插入符/选择位置的方法,在插入位置插入内容和更多。你想要的代码是:

$("textarea").keydown(function(e) {
    if (e.keyCode == 9) {
        e.preventDefault();
        $(this).replaceSelectedText("    ");
    }
});

答案 2 :(得分:0)

答案 3 :(得分:0)

尝试这个,我确定它会起作用。

<form> 
<textarea></textarea>
</form>
<script>
$(function(){
$("textarea").keydown(function(e){
if (e.which == 9){

$("textarea").append(" ");
return false;
}
});
});
</script>

我只是简单地将“keyCode”改为“which”,因为word key来源于jquery ui。

答案 4 :(得分:0)

var range = $(this).get(0).createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();

这个(JSFiddle)是我能管理的最好的,但我无法让它在Firefox或Chrome上运行。如果有人设法获得按钮按下选择文本textarea与Chrome工作,请随时告诉我。