【发布时间】:2014-04-19 01:25:06
【问题描述】:
在 javascript 中是否有办法检测是否在文本区域中输入了单词/字符串?我想检测在 Ace 编辑器或 CodeMirror 中输入的字符串<svg>,然后执行其他操作。听起来好像已经实现了,但我不知道如何实现。
【问题讨论】:
标签: javascript textarea codemirror ace-editor
在 javascript 中是否有办法检测是否在文本区域中输入了单词/字符串?我想检测在 Ace 编辑器或 CodeMirror 中输入的字符串<svg>,然后执行其他操作。听起来好像已经实现了,但我不知道如何实现。
【问题讨论】:
标签: javascript textarea codemirror ace-editor
在 Javascript 中可以绑定到 DOM 对象上的按键向上/向下/按下/等事件。您必须在 HTML 中设置适当的属性。
<textarea onkeyup='checkText(this.value);'></textarea>
这是使用文本区域的值(文本)调用 Javascript 函数的关键行。
这里有一个完整的例子来演示这种用法。最好在 Key Up 上收听,因为在调用函数之前新字符将在文本值中。
<html>
<head>
<script type='text/javascript' >
var oldText = '';
function checkText(text)
{
if(text.length >= 1)
{
if(text == '<svg>' && text != oldText)
{
alert("<svg> found");
}
}
oldText = text;
}
</script>
<body>
<textarea onkeyup='checkText(this.value);'></textarea>
</body>
</html>
【讨论】:
我知道这与其他人的答案有些相似,但它提供了另一种方法:
document.getElementById('textArea').onkeypress = function() {
if(/\<svg\>/i.test(document.getElementById('textArea').value) === true) {
// do whatever you want here
}
}
如果您不熟悉 JS 中的 RegEx,它们是一种伟大在事物中查找某些字符串的方法 - 例如,用户的输入,如您所愿。创建后的i 标志忽略大小写,只是在case 你不知道。此外,在没有 onload 事件或类似事件的情况下将此脚本放在头部是行不通的 - 脚本没有要搜索的内容,因为文档尚未完全加载。
希望这有帮助!
【讨论】:
您可以使用 onchange 事件将输入的内容与预期的内容进行比较。
<html>
<script>
function checktext(){
var val = document.getElementById("textbox").value;
// val is what is in the textbox
// compare val here
// for example
if (val == "<svg>"){
alert(val);
}
}
</script>
<body>
<textarea id="textbox" onchange="checktext()"></textarea>
</body>
</html>
【讨论】:
在 CodeMirror 中,只要代码更改,就会触发 "change" 事件。当它触发时,您可以简单地扫描您感兴趣的字符串的内容。或者,如果您期望一个巨大的文档,并且希望它高效,您可以只扫描文档的更改部分(注意处理字符串位于更改部分和未更改部分边界的情况)。
cmInstance.on("change", function(cm) {
if (cm.getValue().indexOf("<svg>") > -1)
doSomething();
});
【讨论】: