【问题标题】:javascript detect a string is typed in textareajavascript检测在textarea中输入了一个字符串
【发布时间】:2014-04-19 01:25:06
【问题描述】:

在 javascript 中是否有办法检测是否在文本区域中输入了单词/字符串?我想检测在 Ace 编辑器或 CodeMirror 中输入的字符串<svg>,然后执行其他操作。听起来好像已经实现了,但我不知道如何实现。

【问题讨论】:

    标签: javascript textarea codemirror ace-editor


    【解决方案1】:

    在 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>
    

    【讨论】:

    • 你不需要迭代文本或调用 string.prototype.search() 来查看文本?
    • 如果在文本区域输入了其他文本,它不起作用?
    【解决方案2】:

    我知道这与其他人的答案有些相似,但它提供了另一种方法:

    document.getElementById('textArea').onkeypress = function() {
        if(/\<svg\>/i.test(document.getElementById('textArea').value) === true) {
            // do whatever you want here
        }
    }
    

    如果您不熟悉 JS 中的 RegEx,它们是一种伟大在事物中查找某些字符串的方法 - 例如,用户的输入,如您所愿。创建后的i 标志忽略大小写,只是在case 你不知道。此外,在没有 onload 事件或类似事件的情况下将此脚本放在头部是行不通的 - 脚本没有要搜索的内容,因为文档尚未完全加载。

    希望这有帮助!

    【讨论】:

      【解决方案3】:

      您可以使用 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>
      

      【讨论】:

        【解决方案4】:

        在 CodeMirror 中,只要代码更改,就会触发 "change" 事件。当它触发时,您可以简单地扫描您感兴趣的字符串的内容。或者,如果您期望一个巨大的文档,并且希望它高效,您可以只扫描文档的更改部分(注意处理字符串位于更改部分和未更改部分边界的情况)。

        cmInstance.on("change", function(cm) {
          if (cm.getValue().indexOf("<svg>") > -1)
            doSomething();
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-08-16
          • 2012-02-02
          • 2021-07-16
          • 2012-08-21
          • 2014-09-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多