Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在<;textarea>;_Javascript_Jquery_Html - Fatal编程技术网

Javascript 在<;textarea>;

Javascript 在<;textarea>;,javascript,jquery,html,Javascript,Jquery,Html,我知道以前有人问过这个问题(),但提供的答案并没有解决我的问题。我的代码如下: $(文档).ready(()=>{ document.getElementById('input')。onkeydown=e=>{ if(e.keyCode==9 | | e.which==9){ e、 预防默认值(); var s=this.selectionStart; this.value=this.value.substring(0,this.selectionStart)+“\t”+this.value.

我知道以前有人问过这个问题(),但提供的答案并没有解决我的问题。我的代码如下:

$(文档).ready(()=>{
document.getElementById('input')。onkeydown=e=>{
if(e.keyCode==9 | | e.which==9){
e、 预防默认值();
var s=this.selectionStart;
this.value=this.value.substring(0,this.selectionStart)+“\t”+this.value.substring(this.selectionEnd);
this.selectionEnd=s+1;
}
}
/*这个jQuery解决方案也不起作用
$(“#输入”).keydown(e=>{
var keyCode=e.keyCode | | e.which;
if(keyCode==9){
e、 预防默认值();
var start=this.selectionStart;
var end=this.selectionEnd;
//将textarea值设置为:插入符号前的文本+制表符+插入符号后的文本
$(this).val($(this).val().substring(0,start)
+“\t”
+$(this.val().substring(end));
//再次将插入符号置于正确位置
这是selectionStart=
this.selectionEnd=start+1;
}
});
*/
});

该问题完全是由于您使用了箭头函数造成的,这些函数会影响逻辑运行的范围。因此
是引发事件的
窗口
,而不是
文本区域
。使用传统的匿名函数,你的代码就可以正常工作了——现在所有版本的IE都支持它

还请注意,由于您已经在使用jQuery,您还可以使用它来附加不引人注目的事件处理程序,并使用它的简洁方法来修改表单控件值。试试这个:

$(函数(){
$('#input')。关于('keydown',函数(e){
if(e.keyCode==9 | | e.which==9){
e、 预防默认值();
var s=this.selectionStart;
$(this).val(函数(i,v){
返回v.substring(0,s)+“\t”+v.substring(this.selectionEnd)
});
this.selectionEnd=s+1;
}
});
});

该问题完全是由于您使用了箭头函数造成的,这些函数会影响逻辑运行的范围。因此
是引发事件的
窗口
,而不是
文本区域
。使用传统的匿名函数,你的代码就可以正常工作了——现在所有版本的IE都支持它

还请注意,由于您已经在使用jQuery,您还可以使用它来附加不引人注目的事件处理程序,并使用它的简洁方法来修改表单控件值。试试这个:

$(函数(){
$('#input')。关于('keydown',函数(e){
if(e.keyCode==9 | | e.which==9){
e、 预防默认值();
var s=this.selectionStart;
$(this).val(函数(i,v){
返回v.substring(0,s)+“\t”+v.substring(this.selectionEnd)
});
this.selectionEnd=s+1;
}
});
});


谢谢,但是可以更改缩进宽度吗?尽管StackOverflow的“RunCodeSnippet”显示的宽度为4,但当我实际运行代码时,它的宽度为8。编辑:用4个空格替换
“\t”
无效。当然,您可以插入N个空格而不是单个选项卡。请查看编辑我看不到编辑…?我在上面的评论中添加了“用4个空格替换
“\t”
无效”。无论如何,文本区域只添加了一个空格而不是4。谢谢,但是缩进宽度可以更改吗?尽管StackOverflow的“RunCodeSnippet”显示的宽度为4,但当我实际运行代码时,它的宽度为8。编辑:用4个空格替换
“\t”
无效。当然,您可以插入N个空格而不是单个选项卡。请查看编辑我看不到编辑…?我在上面的评论中添加了“用4个空格替换
“\t”
无效”。无论如何,文本区域中只添加了一个空格,而不是4个。