关键字触发功能的输入框

Input box that triggers function on keyword

如果我在这个输入框中输入“x”,我该如何编写一个触发特定功能的输入框? (我正在使用 HTML 和 JavaScript)

这是我试过的代码:

<form>
<input type="text" placeholder="Type " id="inputId_1"></input>

<button type="button" onclick="getInputValue();">Get Value</button>
</form>

<script>
function getInputValue() {
      let an = document.getElementById(inputId_1).value;
    
     if (an == "k") {
    document.getElementById("iftest") = "zero was entered";
}
</script>
<p id ="iftest">Hello</p>

您可以针对此特定场景使用 keyupkeydown 事件监听器:

function handleKeyUp(event) {
  if (event.key.toLowerCase() == "x") {
    console.log("x typed")
  }
}
<input onkeyup="handleKeyUp(event)">

一种允许 自定义匹配值 的通用方法引入了一种可重用组件,该组件由其特定 custom data- attribute and initialized via querySelectorAll and/or querySelector.

初始化过程非常基本,通过向每个已识别的输入元素添加通用实现的 handler function via addEventListener 来处理组件的事件处理。

低级通用处理程序被任何 input value change and derives all necessary data from the passed event object.

触发

输入元素的 value 值和输入元素 dataset will be toLowerCased before trying to figure out whether they match partially or not via value.includes(match)match 值。

在这两种情况下,都将使用相关的 HTML output 元素,在前一种情况下,会呈现错误特定消息,在后一种情况下,将清除输出。

function handleTextInputMatch(evt) {
  const elmInput = evt.currentTarget;
  const elmOutput = elmInput.parentNode.querySelector('output');

  const value = elmInput.value.toLowerCase();
  const match = elmInput.dataset.match.toLowerCase();

  if (value.includes(match)) {

    elmOutput.textContent = elmInput.dataset.matchOutput;
  } else {
    elmOutput.textContent = '';
  }
}

function initialize() {
  document
    .querySelectorAll('[data-text-input-match] [data-match]')
    .forEach(elmInput =>
      elmInput.addEventListener('input', handleTextInputMatch)
    );
}

initialize();
output { color: #c00; }
<form>
  <fieldset data-text-input-match>
    <legend>
      no "XXX" in any case
    </legend>
    <input
      type="text"
      data-match="xxx"
      data-match-output="partially invalid input value"
    />
    <output></output>
  </fieldset>

  <fieldset data-text-input-match>
    <legend>
      no "Foo" in any case
    </legend>
    <input
      type="text"
      data-match="FOO"
      data-match-output="invalid character sequence"
    />
    <output></output>
  </fieldset>
</form>