【问题标题】:Insert four spaces instead of tab插入四个空格而不是制表符
【发布时间】:2014-12-29 15:08:01
【问题描述】:

我试图在按下 Tab 键时插入四个空格。我正在使用以下代码(请参阅spaces = "\t"),但是当我将其切换到spaces = " " 时,按下制表符时只插入一个空格。我也试过""+""+""+"":

$(function () {
  $('textarea').keydown(function(e) {
    var keyCode = e.keyCode || e.which;

    if (keyCode == 9) {
      e.preventDefault();
      var start = $(this).get(0).selectionStart;
      var end = $(this).get(0).selectionEnd;

      // set textarea value to: text before caret + tab + text after caret
      spaces = "\t"
      $(this).val($(this).val().substring(0, start)
                  + spaces 
                  + $(this).val().substring(end));

      // put caret at right position again
      $(this).get(0).selectionStart =
      $(this).get(0).selectionEnd = start + 1;
    }
  });
});

注意:这是在基于浏览器的 textarea/ide 中插入空格。

【问题讨论】:

  • 在 Chrome/IE9/FF32 中为我工作 - jsfiddle.net/17auq970 - 你使用的是哪个浏览器?
  • 不完全相关,但不需要e.which 检查,jQuery 会为您标准化属性(which)。
  • 谢谢@Teemu 好主意
  • 您可以尝试将font-family 专门设置为monospace。否则这工作得很好。

标签: javascript jquery html keycode


【解决方案1】:

您的代码运行良好,但您只是将插入符号放在了错误的位置。将最后一行更改为:

this.selectionStart = this.selectionEnd = start + spaces.length;

演示: http://jsfiddle.net/qdqrs3cw/

【讨论】:

  • @maudulus 不客气:) 同样在演示中,我用内部相同的替代this.selection... 替换了$(this).get(0).selection... 和其他小位,以使代码运行得更快,看起来更好。
【解决方案2】:

尝试插入"&nbsp&nbsp&nbsp&nbsp" 而不是四个空格

PS 很抱歉没有看到 textarea 中需要空格,在这种情况下 HTML 实体将无济于事

【讨论】:

  • <textarea> 应该正常处理四个空格。
  • 我试过了,但它在文本区域中将“&nbsp&nbsp&nbsp&nbsp”作为字符串插入。
猜你喜欢
  • 2019-01-29
  • 2011-07-06
  • 2018-08-28
  • 1970-01-01
  • 2011-03-28
  • 2010-12-06
  • 2010-12-29
  • 2011-05-27
  • 2013-09-29
相关资源
最近更新 更多