如何自动关闭方括号 []
和自动关闭方括号 {}
。
我尝试使用@Ivan Ganchev的想法:
maintextarea.addEventListener('keyup', function (ev) {
let position = this.selectionStart;
if (ev.keyCode == 222) { // I replaced this with 219 for open bracket and curly bracket
let value = ev.target.value;
ev.target.value = [value.slice(0, position), ev.key, value.slice(position)].join('');
ev.target.selectionEnd = position;
}
});
但是结果是这样的: {{ 要么: [[。
答案 0 :(得分:1)
下面是一个使用Map
存储字符及其匹配的结束字符的示例,该字符允许轻松添加或自定义字符对。 Map.get()
从地图中获取指定的元素,或者返回undefined
,以便进行紧凑检查。
它还使用了input
侦听器,而不是keyup
,因为您不需要检测修饰键,并且感觉响应更快(尽管IE <9不支持)
const closeChars = new Map([
['{', '}'],
['[', ']'],
['(', ')']
]);
maintextarea=document.getElementById('maintextarea');
maintextarea.addEventListener('input', function (e) {
const pos = e.target.selectionStart;
const val = [...e.target.value];
const char = val.slice(pos-1, pos)[0];
const closeChar = closeChars.get(char);
if (closeChar) {
val.splice(pos, 0, closeChar);
e.target.value = val.join('');
e.target.selectionEnd = pos;
}
});
<textarea id="maintextarea" name="closebrackets" rows="8" cols="50">
</textarea>