【问题标题】:How to get input.value in JavaScript when the "Enter" key is pressed if I have more buttons next to the input tag?如果输入标签旁边有更多按钮,当按下“Enter”键时如何在 JavaScript 中获取 input.value?
【发布时间】:2020-08-14 18:36:15
【问题描述】:

这里有一些代码。当我按下回车键时,我正在尝试使用 JavaScript 获取 input.value。 如果我删除第一个按钮而不是它正在工作,但是如果我像这样离开代码,或者如果我将第一个按钮放在输入标记之前 - 它不起作用。

    const todoInput = document.querySelector(".todo-input");
    const submit = document.querySelector(".addBtn");
    
    submit.addEventListener("click", () => {
      console.log(todoInput.value);
    })
<div class="todo-input-container">
      <form class="input-form">
        <input
         type="text"
         class="todo-input"
         placeholder="Add task..." />
        <button class="btn flagBtn inputFlagBtn">
          <span>
            <i class="far fa-flag"></i>
          </span>
        </button>
        <button class="btn addBtn" type="submit">
          <span>
            <i class="fas fa-plus-circle"></i>
          </span>
        </button>
      </form>
    </div>

为什么只有当我从 html 中删除第一个按钮时按“Enter”键才能得到 todoInput.value? 我需要做哪些调整才能使其同时与两个按钮一起使用?

【问题讨论】:

  • 只有一个提交按钮时,表单才会自动提交。当有多个提交按钮时,您必须明确单击其中一个。
  • 你可以把 eventListener 放在 btn 类上
  • 我需要它在任何一种情况下都能正常工作。所以当我点击“addButton”类时我需要它工作,但当我按下回车键时我也需要它工作。
  • 我的 type="submit" 只有一个按钮。
  • 默认类型是提交,所以其他按钮也是提交按钮。使用type="button" 覆盖默认值。

标签: javascript html button input


【解决方案1】:

如果只有一个提交按钮,在输入字段中按 Enter 只会自动提交表单。

您的标志按钮也是一个提交按钮,因为当没有type 属性时这是默认按钮。如果它不应该是提交按钮,请将type="button" 添加到它。

const todoInput = document.querySelector(".todo-input");
    const submit = document.querySelector(".addBtn");
    
    submit.addEventListener("click", () => {
      console.log(todoInput.value);
    })
<div class="todo-input-container">
      <form class="input-form">
        <input
         type="text"
         class="todo-input"
         placeholder="Add task..." />
        <button class="btn flagBtn inputFlagBtn" type="button">
          <span>
            <i class="far fa-flag"></i>
          </span>
        </button>
        <button class="btn addBtn" type="submit">
          <span>
            <i class="fas fa-plus-circle"></i>
          </span>
        </button>
      </form>
    </div>

【讨论】:

    【解决方案2】:

    您可以在 Input 字段中添加 keydown 事件监听器,这样当用户点击输入元素,输入内容,然后按 Enter 时,应该触发事件监听器。

        const todoInput = document.querySelector(".todo-input");
        const submit = document.querySelector(".addBtn");
        
        submit.addEventListener("click", () => {
          console.log(todoInput.value);
        });
    
    
       //jQuery
       $("input").on("keydown", function (e) {
            if (e.keyCode == 13) { //13 is keyCode for Enter key
                e.preventDefault(); //look this up
                console.log(todoInput.value);
            }
        });
    

    【讨论】:

    • 我不懂 jQuery。 (蒙着眼睛的猴子:)
    • 有没有机会在 vanilla JS 中得到帮助。
    • 我只需要两种情况的解决方案。无论用户是否按下回车键或单击“提交”按钮,我都需要定位该值。
    • 我应该只使用两个不同的事件监听器吗?好像这样可行?
    • 当然,你可以使用两个事件监听器。您可以查看 jQuery 的工作原理,它比 Vanilla 容易得多。例如:$("input") 可以写成 document.getElementsByTagName("input")[0].
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多