作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试在文本框中开发大括号自动完成功能。我在文本框上尝试了 javascript 替换功能。但是我从函数中得到了一个奇怪的输出。这是我正在处理的代码。
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<input type ="text" id="textbox">
</body>
</html>
Javascript:
var element = document.getElementById('textbox');
element.oninput = function(){
var code = (function(){
var val = element.value;
element.value = val.replace(/\{/ , "{}");
})();
};
当我键入单个 {
大括号时,我得到 {}
,当我键入超过 1 个时,我得到 {}}}{{
然后它继续......有时我的浏览器在我尝试清除大括号时卡住。
这是 js bin 链接 JSBIN
最佳答案
问题是您总是将 {
替换为 {}
,即使括号已经匹配。您应该确保它不是 negative lookahead : /\{(?!\})/
onkeyup
并添加一个保护子句。扩展@Andi 的想法,我还为箭头键添加了排除项,这样当您想要浏览文本时就不会被迫到文本框的末尾:
var element = document.getElementById('textbox');
element.onkeyup = function(){
if([8, 37, 39].indexOf(event.which) != -1)
return false;
var code = (function(){
var val = element.value;
element.value = val.replace(/\{(?!\})/g, "{}");
})();
};
关于javascript - 我如何用 {} 替换 {,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31945533/
我是一名优秀的程序员,十分优秀!