使用制表符缩进文本区域


143

我这边有一个简单的html textarea。现在,如果您单击其中的选项卡,它将转到下一个字段。我想使选项卡按钮缩进一些空格。我怎样才能做到这一点?谢谢。


这可以用JavaScript做到,而使用JS库几乎很容易。您可以使用这些选项中的任何一个吗?
大卫说,请恢复莫妮卡(Monica)

您的环境如何?Javascript,Jquery,还有其他东西吗?
kasdega,2011年

@david我可以手动使用其中任何一个
user780483

我会使用结合.focus()和.keydown()的jquery
kasdega 2011年

Answers:


120

从其他答案中大量借用类似问题(如下所述)...

$(document).delegate('#textbox', 'keydown', function(e) {
  var keyCode = e.keyCode || e.which;

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

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

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

jQuery:如何在文本框中捕获TAB按键

如何处理textarea中的<tab>?

http://jsfiddle.net/jz6J5/


13
“ $(this).get(0).selectionStart”。仅使用“ this.selectionStart”
Bohdan Yurov 2014年

您可以让它使用4个空格而不是\ t吗?如果将\ t替换为“”,则会插入空格,但将插入符号放在后面。
Sinaesthetic 2014年

@Sinaesthetic-回复晚,但要移动插入符号,请将最后一行调整为“开始+ 4”,而不是“开始+ 1”
nevada_scout 2014年

4
我通常不直接从Stackoverflow复制代码并将其粘贴到我的项目中并使它工作,但是当我这样做时,它就是这段代码。谢谢你
Flat Cat

10
这会破坏浏览器的撤消功能(Ctrl + z)。
01AutoMonkey

54
var textareas = document.getElementsByTagName('textarea');
var count = textareas.length;
for(var i=0;i<count;i++){
    textareas[i].onkeydown = function(e){
        if(e.keyCode==9 || e.which==9){
            e.preventDefault();
            var s = this.selectionStart;
            this.value = this.value.substring(0,this.selectionStart) + "\t" + this.value.substring(this.selectionEnd);
            this.selectionEnd = s+1; 
        }
    }
}

此解决方案不需要jQuery,并将在页面上的所有文本区域上启用标签功能。


您可以让它使用4个空格而不是\ t吗?如果将\ t替换为“”,则会插入空格,但将插入符号放在后面。
Sinaesthetic 2014年

1
@Sinaesthetic:是的,您可以将制表符更改为空格,但是您必须修改一点代码(新的字母是3-4个,而不是一个)。另一种选择是CSS tab-size。
阿德里安·梅尔

@Sinaesthetic是的,只需更换最后一行this.selectionEnd = s+1;this.selectionEnd = s + "\t".length;。使用变量或函数参数并在其中存储缩进字符会更清洁。但是您知道现在要替换什么:+1定义插入符移动了多少个字符。
StanE

2
KeyboardEvent.keyCodeKeyboardEvent.which已弃用的属性。使用KeyboardEvent.key代替。
КонстантинВан

48

正如其他人所写的那样,您可以使用JavaScript捕获事件,阻止默认操作(以使光标不会移动焦点)并插入制表符。

但是,禁用默认行为将导致无法在不使用鼠标的情况下将焦点移出文本区域。盲人用户仅使用键盘与网页进行交互-他们看不到鼠标指针可以对键盘做任何有用的事情,因此,键盘还是什么也没有。Tab键是浏览文档(尤其是表单)的主要方法。覆盖Tab键的默认行为将使盲人用户无法将焦点移至下一个表单元素。

因此,如果您要为广大读者编写网站,则建议不要在没有令人信服的理由的情况下这样做,并为盲人用户提供某种替代方法,以免他们陷入文本区域。


2
谢谢。我不是想听起来很粗鲁,但我不知道盲人会使用计算机。我会牢记这一点
user780483'7

10
没关系,很多人不知道;这只是他们的经验之外。这里是一个介绍:webaim.org/intro
Will Martin

是的,如果这是一个面向一般受众的网站,那真是个坏主意。除了屏幕阅读器用户外,还有许多其他用户出于各种原因必须或选择使用键盘进行导航。键入Tab键将使该表格至少令人讨厌,并且对于这些用户而言很有可能无法使用。
steveax

6
也许使用Control + Tab。这将劫持浏览器到其他选项卡(网页)的功能,但用户可以只在文本框中跳出标签,然后将选项卡控制到另一页。在页面上应该有提示,请使用ctrl + tab来制表符。
约瑟夫·麦金太尔2013年

感谢@WillMartin非常有价值的信息。我打算在整个博客中为所有文本区域实现相同的功能,而无需考虑这一非常关键的问题。
伊姆兰

40

对于它的价值,这是我的一线话,对于大家在该主题中一直在谈论的内容:

<textarea onkeydown="if(event.keyCode===9){var v=this.value,s=this.selectionStart,e=this.selectionEnd;this.value=v.substring(0, s)+'\t'+v.substring(e);this.selectionStart=this.selectionEnd=s+1;return false;}">
</textarea>

在最新版本的Chrome,Firefox,Internet Explorer和Edge中测试。


先生,您真了不起。
NiCk Newman

1
如何修改此代码以使用4个空格而不是制表符?我尝试过 四次,但仍将其转换为一个空格。
jiaweizhang,2016年

5
尼克,请告诉我妻子。jiaweizhang,将'\ t'替换为'<4个空格>',将1替换为
4。– elgholm

1
最好的答案!
Marco Demaio

1
非常整洁,以下是通过SHIFT进行的反向操作:if(event.shiftKey){if(v.substring(s-1,s)==='\t'){this.value=v.substring(0,s-1)+v.substring(e);this.selectionStart=this.selectionEnd=s-1;}}
DonFuchs

12

这是我的版本,支持:

  • 标签+ Shift标签
  • 维护撤消堆栈,以便简单地插入制表符
  • 支持块行缩进/取消缩进,但会丢弃撤消堆栈
  • 块缩进/缩进时正确选择整行
  • 支持按回车键自动缩进(保持撤消堆栈)
  • 在下一个选项卡/输入键上使用退出键取消支持(因此您可以按退出键然后退出)
  • 适用于Chrome + Edge,未经测试的其他人。

$(function() { 
	var enabled = true;
	$("textarea.tabSupport").keydown(function(e) {

		// Escape key toggles tab on/off
		if (e.keyCode==27)
		{
			enabled = !enabled;
			return false;
		}

		// Enter Key?
		if (e.keyCode === 13 && enabled)
		{
			// selection?
			if (this.selectionStart == this.selectionEnd)
			{
				// find start of the current line
				var sel = this.selectionStart;
				var text = $(this).val();
				while (sel > 0 && text[sel-1] != '\n')
				sel--;

				var lineStart = sel;
				while (text[sel] == ' ' || text[sel]=='\t')
				sel++;

				if (sel > lineStart)
				{
					// Insert carriage return and indented text
					document.execCommand('insertText', false, "\n" + text.substr(lineStart, sel-lineStart));

					// Scroll caret visible
					this.blur();
					this.focus();
					return false;
				}
			}
		}

		// Tab key?
		if(e.keyCode === 9 && enabled) 
		{
			// selection?
			if (this.selectionStart == this.selectionEnd)
			{
				// These single character operations are undoable
				if (!e.shiftKey)
				{
					document.execCommand('insertText', false, "\t");
				}
				else
				{
					var text = this.value;
					if (this.selectionStart > 0 && text[this.selectionStart-1]=='\t')
					{
						document.execCommand('delete');
					}
				}
			}
			else
			{
				// Block indent/unindent trashes undo stack.
				// Select whole lines
				var selStart = this.selectionStart;
				var selEnd = this.selectionEnd;
				var text = $(this).val();
				while (selStart > 0 && text[selStart-1] != '\n')
					selStart--;
				while (selEnd > 0 && text[selEnd-1]!='\n' && selEnd < text.length)
					selEnd++;

				// Get selected text
				var lines = text.substr(selStart, selEnd - selStart).split('\n');

				// Insert tabs
				for (var i=0; i<lines.length; i++)
				{
					// Don't indent last line if cursor at start of line
					if (i==lines.length-1 && lines[i].length==0)
						continue;

					// Tab or Shift+Tab?
					if (e.shiftKey)
					{
						if (lines[i].startsWith('\t'))
							lines[i] = lines[i].substr(1);
						else if (lines[i].startsWith("    "))
							lines[i] = lines[i].substr(4);
					}
					else
						lines[i] = "\t" + lines[i];
				}
				lines = lines.join('\n');

				// Update the text area
				this.value = text.substr(0, selStart) + lines + text.substr(selEnd);
				this.selectionStart = selStart;
				this.selectionEnd = selStart + lines.length; 
			}

			return false;
		}

		enabled = true;
		return true;
	});
});
textarea
{
  width: 100%;
  height: 100px;
  tab-size: 4;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea class="tabSupport">if (something)
{
	// This textarea has "tabSupport" CSS style
	// Try using tab key
	// Try selecting multiple lines and using tab and shift+tab
	// Try pressing enter at end of this line for auto indent
	// Use Escape key to toggle tab support on/off
	//     eg: press Escape then Tab to go to next field
}
</textarea>
<textarea>This text area doesn't have tabSupport class so disabled here</textarea>


1
这是最好的答案。
FourCinnamon0

在没有jQuery的情况下,这需要一点点工作。检查youmightnotneedjquery.com以获得帮助。绝对也是这里最好的答案。
詹蒙·霍姆格伦

10

两者都是直截了当且不会丢失撤消(Ctrl + Z)最后更改的功能的现代方法。

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

    if (keyCode === $.ui.keyCode.TAB) {
        e.preventDefault();

        const TAB_SIZE = 4;

        // The one-liner that does the magic
        document.execCommand('insertText', false, ' '.repeat(TAB_SIZE));
    }
});

有关更多execCommand


编辑:

正如评论中指出的(虽然这曾经是“现代”解决方案),但该功能已过时。引用文档:

此功能已过时。尽管它可能在某些浏览器中仍然可以使用,但不建议使用它,因为可以随时将其删除。尽量避免使用它。


3
这是目前唯一的正确答案。非常感谢。🙏–
克里斯·卡洛

2
遗憾的是,没有Firefox支持。尝试indent-textarea使用此方法的跨浏览器解决方案以及Firefox中的后备功能。
fregante

在Firefox中,document.execCommand只有在设置后才能启用document.designMode = "on";。我能够使文本写入具有的元素.contentEditable = 'true'。但是,当我尝试在textarea上完成此操作时,插入的textNode会被放置在文档中textarea的正前方(而不是在textarea中)。请尝试帮助Mozilla 在此处解决此问题
Lonnie Best

请注意,您链接的页面注释(关于execCommand)不再视为“现代” :“此功能已过时。尽管它可能在某些浏览器中仍然可以使用,但不建议使用它,因为可以随时将其删除。尝试避免使用它。
kasimir

9

在AngularJS环境中尝试使用@kasdega的答案的过程很快,但是我尝试过的一切似乎都无法使Angular对更改采取行动。因此,万一对路人有用,这里是对@kasdega的代码AngularJS风格的重写,它对我有用:

app.directive('ngAllowTab', function () {
    return function (scope, element, attrs) {
        element.bind('keydown', function (event) {
            if (event.which == 9) {
                event.preventDefault();
                var start = this.selectionStart;
                var end = this.selectionEnd;
                element.val(element.val().substring(0, start) 
                    + '\t' + element.val().substring(end));
                this.selectionStart = this.selectionEnd = start + 1;
                element.triggerHandler('change');
            }
        });
    };
});

和:

<textarea ng-model="mytext" ng-allow-tab></textarea>

这是通话非常重要element.triggerHandler('change');,否则模型将不会被更新(因为element.triggerHandler('change');我想。
阿尔瓦罗FlañoLarrondo

6

您必须编写JS代码才能捕捉到TAB键并插入大量空格。与JSFiddle相似。

检查jQuery 小提琴

HTML

<textarea id="mybox">this is a test</textarea>

JavaScript

$('#mybox').live('keydown', function(e) { 
  var keyCode = e.keyCode || e.which; 

  if (keyCode == 9) { 
    e.preventDefault(); 
    alert('tab pressed');
  } 
});

2
不要忘记也要阻止默认操作。event.preventDefault();
瑞安

2
在新版本中,Live已被替换为on。
Eric Harms 2013年

event.which属性规范化event.keyCode和event.charCode。您不需要检查e.keyCode || e.which
Trevor

6

基于@kasdega解决方案的多行检测脚本。

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

    if (keyCode === 9) {
        e.preventDefault();
        var start = this.selectionStart;
        var end = this.selectionEnd;
        var val = this.value;
        var selected = val.substring(start, end);
        var re = /^/gm;
        var count = selected.match(re).length;


        this.value = val.substring(0, start) + selected.replace(re, '\t') + val.substring(end);
        this.selectionStart = start;
        this.selectionEnd = end + count;
    }
});

1
到目前为止的最佳解决方案,但当时可能不应该创建选择start === end
mpen 2015年

6

该解决方案允许像您的典型代码编辑器一样在整个选项中进行制表,也可以取消对该选项的制表。但是,当没有选择时,我还没有弄清楚如何实现shift-tab。

$('#txtInput').on('keydown', function(ev) {
    var keyCode = ev.keyCode || ev.which;

    if (keyCode == 9) {
        ev.preventDefault();
        var start = this.selectionStart;
        var end = this.selectionEnd;
        var val = this.value;
        var selected = val.substring(start, end);
        var re, count;

        if(ev.shiftKey) {
            re = /^\t/gm;
            count = -selected.match(re).length;
            this.value = val.substring(0, start) + selected.replace(re, '') + val.substring(end);
            // todo: add support for shift-tabbing without a selection
        } else {
            re = /^/gm;
            count = selected.match(re).length;
            this.value = val.substring(0, start) + selected.replace(re, '\t') + val.substring(end);
        }

        if(start === end) {
            this.selectionStart = end + count;
        } else {
            this.selectionStart = start;
        }

        this.selectionEnd = end + count;
    }
});
#txtInput {
  font-family: monospace;
  width: 100%;
  box-sizing: border-box;
  height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<textarea id="txtInput">
$(document).ready(function(){
	$("#msgid").html("This is Hello World by JQuery");
});
</textarea>


这很好用,但是您至少可以限制shift-tab,而不会选择引发错误。我用简单的if (selected.length > 0) {...}小提琴来做到这一点:jsfiddle.net/jwfkbjkr

3

根据人们在回答时在这里所说的所有内容,它只是keydown(不是keyup)+ preventDefault()+在插入符号处插入制表符的组合。就像是:

var keyCode = e.keyCode || e.which;
if (keyCode == 9) {
   e.preventDefault();
   insertAtCaret('txt', '\t')
}

较早的答案有一个可行的jsfiddle,但它在按下keydown时使用了alert()。如果删除此警报,则它不起作用。我刚刚添加了一个功能,可以在文本区域的当前光标位置插入一个选项卡。

这里是一个工作的jsfiddle:http : //jsfiddle.net/nsHGZ/


3

我看到这个问题没有解决。我对此进行了编码,并且效果很好。它在光标索引处插入一个列表。不使用jQuery

<textarea id="myArea"></textarea>
<script>
document.getElementById("myArea").addEventListener("keydown",function(event){
    if(event.code==="Tab"){
        var cIndex=this.selectionStart;
        this.value=[this.value.slice(0,cIndex),//Slice at cursor index
            "\t",                              //Add Tab
            this.value.slice(cIndex)].join('');//Join with the end
        event.stopPropagation();
        event.preventDefault();                //Don't quit the area
        this.selectionStart=cIndex+1;
        this.selectionEnd=cIndex+1;            //Keep the cursor in the right index
    }
});
</script>

2
但是,这段代码弄乱了撤消堆栈。使用后插入标签,有时您无法撤消任何操作,也只能退后1-2步。
Magnus Eriksson


2

我做了一个您可以使用任何喜欢的textarea元素访问的对象:

function textControl (element, event)
{
    if(event.keyCode==9 || event.which==9)
    {
        event.preventDefault();
        var s = element.selectionStart;
        element.value = element.value.substring(0,element.selectionStart) + "\t" + element.value.substring(element.selectionEnd);
        element.selectionEnd = s+1; 
    }
}

元素看起来像这样:

<textarea onkeydown="textControl(this,event)"></textarea>

2

我发现使用香草JavaScript的现代浏览器中执行此操作的最简单方法是:

  <textarea name="codebox"></textarea>
  
  <script>
  const codebox = document.querySelector("[name=codebox]")

  codebox.addEventListener("keydown", (e) => {
    let { keyCode } = e;
    let { value, selectionStart, selectionEnd } = codebox;

    if (keyCode === 9) {  // TAB = 9
      e.preventDefault();

      codebox.value = value.slice(0, selectionStart) + "\t" + value.slice(selectionEnd);

      codebox.setSelectionRange(selectionStart+2, selectionStart+2)
    }
  });
  </script>

请注意,为简单起见,我在此代码段中使用了许多ES6功能,您可能需要在部署它之前先对其进行转换(使用Babel或TypeScript)。


1

上面的答案全部擦除了撤消历史记录。对于寻求解决方案的人,我花了最后一个小时为Chrome编写以下代码:

jQuery.fn.enableTabs = function(TAB_TEXT){
    // options
    if(!TAB_TEXT)TAB_TEXT = '\t';
    // text input event for character insertion
    function insertText(el, text){
        var te = document.createEvent('TextEvent');
        te.initTextEvent('textInput', true, true, null, text, 9, "en-US");
        el.dispatchEvent(te);
    }
    // catch tab and filter selection
    jQuery(this).keydown(function(e){
        if((e.which || e.keyCode)!=9)return true;
        e.preventDefault();
        var contents = this.value,
            sel_start = this.selectionStart,
            sel_end = this.selectionEnd,
            sel_contents_before = contents.substring(0, sel_start),
            first_line_start_search = sel_contents_before.lastIndexOf('\n'),
            first_line_start = first_line_start_search==-1 ? 0 : first_line_start_search+1,
            tab_sel_contents = contents.substring(first_line_start, sel_end),
            tab_sel_contents_find = (e.shiftKey?new RegExp('\n'+TAB_TEXT, 'g'):new RegExp('\n', 'g')),
            tab_sel_contents_replace = (e.shiftKey?'\n':'\n'+TAB_TEXT);
            tab_sel_contents_replaced = (('\n'+tab_sel_contents)
                .replace(tab_sel_contents_find, tab_sel_contents_replace))
                .substring(1),
            sel_end_new = first_line_start+tab_sel_contents_replaced.length;
        this.setSelectionRange(first_line_start, sel_end);
        insertText(this, tab_sel_contents_replaced);
        this.setSelectionRange(first_line_start, sel_end_new);
    });
};

简而言之,制表符将插入所选行的开头。

JSFiddle:http : //jsfiddle.net/iausallc/5Lnabspr/11/

要点:https : //gist.github.com/iautomation/e53647be326cb7d7112d

用法示例: $('textarea').enableTabs('\t')

缺点:仅适用于Chrome。


此脚本的哪一部分仅在Chrome中有效?是“ TextEvent”吗?help.dottoro.com/lagstsiq.php/#TextEvent这个网站说它也应该在IE9 +和Safari中工作。由于我需要用于Chrome应用程序,因此非常理想。
Andreas Linnert

@Andreas Linnert,您是对的。据记载,它可以在IE和Safari中使用。但是,在撰写本文时,IE并不适合我,而且我根本没有时间进一步研究它,而且我还没有在Safari中进行测试。抱歉造成混乱。我很高兴能为您提供帮助。
iautomation

0

Github上有一个库,用于由wjbryant在您的文本区域中支持标签:Tab Override

它是这样工作的:

// get all the textarea elements on the page
var textareas = document.getElementsByTagName('textarea');

// enable Tab Override for all textareas
tabOverride.set(textareas);

答案不错,但是查看代码时,它使用的技术与此处答案中描述的技术几乎相同:github.com/wjbryant/taboverride/blob/master/src/…。这意味着它不会保留撤消历史记录,这是主要问题。
mihai

0

作为上述kasdega代码的一种选择,您可以在当前光标点插入字符,而不是将选项卡附加到当前值。这样做的好处是:

  • 允许您插入4个空格来代替制表符
  • 撤消和重做将适用于插入的字符(不适用于OP)

所以更换

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

    // set textarea value to: text before caret + tab + text after caret
    document.execCommand("insertText", false, '    ');

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

    if (start === end) {
        $(this).val($(this).val().substring(0, start)
                    + "\t"
                    + $(this).val().substring(end));
        $(this).get(0).selectionStart =
        $(this).get(0).selectionEnd = start + 1;
    } else {
        var sel = $(this).val().substring(start, end),
            find = /\n/g,
            count = sel.match(find) ? sel.match(find).length : 0;
        $(this).val($(this).val().substring(0, start)
                    + "\t"
                    + sel.replace(find, "\n\t")
                    + $(this).val().substring(end, $(this).val().length));
        $(this).get(0).selectionStart =
        $(this).get(0).selectionEnd = end+count+1;
    }
}

-1

试试这个简单的jQuery函数:

$.fn.getTab = function () {
    this.keydown(function (e) {
        if (e.keyCode === 9) {
            var val = this.value,
                start = this.selectionStart,
                end = this.selectionEnd;
            this.value = val.substring(0, start) + '\t' + val.substring(end);
            this.selectionStart = this.selectionEnd = start + 1;
            return false;
        }
        return true;
    });
    return this;
};

$("textarea").getTab();
// You can also use $("input").getTab();

-1

我必须做一个函数来做同样的事情,它很容易使用,只需将此代码复制到脚本中并使用:enableTab( HTMLElement )HTMLelement就像document.getElementById( id )


代码是:

function enableTab(t){t.onkeydown=function(t){if(9===t.keyCode){var e=this.value,n=this.selectionStart,i=this.selectionEnd;return this.value=e.substring(0,n)+" "+e.substring(i),this.selectionStart=this.selectionEnd=n+1,!1}}}

-1

每个textarea元素的输入都有一个onkeydown事件。在事件处理程序中,只要event.keyCode为9,就可以通过使用event.preventDefault()来防止Tab键的默认响应。

然后将制表符放在正确的位置:

function allowTab(input)
{
    input.addEventListener("keydown", function(event)
    {
        if(event.keyCode == 9)
        {
            event.preventDefault();

            var input = event.target;

            var str = input.value;
            var _selectionStart = input.selectionStart;
            var _selectionEnd = input.selectionEnd;

            str = str.substring(0, _selectionStart) + "\t" + str.substring(_selectionEnd, str.length);
            _selectionStart++;

            input.value = str;
            input.selectionStart = _selectionStart;
            input.selectionEnd = _selectionStart;
        }
    });
}

window.addEventListener("load", function(event)
{
    allowTab(document.querySelector("textarea"));
});

html

<textarea></textarea>

-1
$("textarea").keydown(function(event) {
    if(event.which===9){
        var cIndex=this.selectionStart;
        this.value=[this.value.slice(0,cIndex),//Slice at cursor index
            "\t",                              //Add Tab
            this.value.slice(cIndex)].join('');//Join with the end
        event.stopPropagation();
        event.preventDefault();                //Don't quit the area
        this.selectionStart=cIndex+1;
        this.selectionEnd=cIndex+1;            //Keep the cursor in the right index
    }
});

-1

简单的独立脚本:

textarea_enable_tab_indent = function(textarea) {    
    textarea.onkeydown = function(e) {
        if (e.keyCode == 9 || e.which == 9){
            e.preventDefault();
            var oldStart = this.selectionStart;
            var before   = this.value.substring(0, this.selectionStart);
            var selected = this.value.substring(this.selectionStart, this.selectionEnd);
            var after    = this.value.substring(this.selectionEnd);
            this.value = before + "    " + selected + after;
            this.selectionEnd = oldStart + 4;
        }
    }
}

-3

如果您确实需要标签,请从单词或记事本中复制标签,然后将其粘贴到所需的文本框中

1 2 3

12 22 33

不幸的是,我认为他们虽然从这些注释中删除了这些选项卡:)在您的POST或GET中它将显示为%09


2
我认为这是一个答案,尽管确实很糟糕。这建议一种替代方法,即为最终用户提供解决方法。
GS-向Monica道歉,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.