【问题标题】:How do I prevent my keyUp event listener from firing multiple times [duplicate]如何防止我的 keyUp 事件侦听器多次触发 [重复]
【发布时间】:2019-05-26 15:16:57
【问题描述】:

好的,在问这个问题之前,我确定在 stackoverflow 上已经有答案了……但我找不到任何东西,所以这里是:

我正在使用烧瓶创建网站。其中之一是制作 cmets。

当我点击回车时,它应该提交表单以向数据库添加评论。

这是我的代码:

(这是表格)

<form method="POST">
    {{ form.hidden_tag() }}
    {% if form.comment.errors %}
        {{ form.comment(id="comment-input", class="new-comment", placeholder="Add a new comment", autofocus="autofocus") }}
        <div class="invalid-feedback" style="display: block;">
            {% for error in form.comment.errors %}
                <span>{{ error }}</span>
            {% endfor %}
        </div>
    {% else %}
        {{ form.comment(id="comment-input", class="new-comment", placeholder="Add a new comment", autofocus="autofocus") }}
    {% endif %}
    {{ form.submit(class="btn btn-outline-info", id="submit", style="display:none;") }}
</form>

当按下回车键时,我正在使用这个 javascript 提交表单:

var input = document.getElementById("comment-input");
input.addEventListener("keyup", function(event) {
  // Cancel the default action, if needed
  event.preventDefault();
  // Number 13 is the "Enter" key on the keyboard
  if (event.keyCode === 13) {
    // Trigger the button element with a click
    document.getElementById("submit").click()
  }
});

问题是,通常如果我在输入评论后按 Enter 键,它可以正常工作,但如果我在输入评论后按住 Enter 键,它会提交多个 cmets。

但是,如果您查看我的代码,它会显示 keyUp 而不是 keyDown!我很确定当你按住一个键时,它仍然只有keyUp 一次。

我已经通过stackoverflow等查看了大约2个小时,希望这个问题对我的情况有所帮助。

【问题讨论】:

  • @Herohtar 抱歉,这只是一个错字,我在我的代码中将其命名为 keyup
  • 在这种情况下,您没有采取任何措施来阻止表单的默认 submit 事件。如果您在作为表单一部分的输入字段中按 Enter,则默认操作是提交表单。
  • 哦,好吧。所以我应该完全删除该功能?
  • event.preventDefault() 应该可以解决问题@Herohtar
  • @ShahinSorkh 已经存在了,对吧?

标签: javascript html events flask addeventlistener


【解决方案1】:

keyUp 不是 JavaScript 中的有效事件。您必须获得正确的大小写才能手动触发事件。在您的事件监听器中将keyUp 更改为keyup,它应该可以正常工作。

通过阻止该事件来阻止表单提交:

document.querySelector('form').addEventListener('submit', function (e) {
    e.preventDefault();
}, false);

【讨论】:

  • 对不起,这不起作用我的事件监听器中有keyup。也触发了,次数太多了
  • 那么,我怀疑它与你的 JavaScript 监听器无关,因为你的 JS 现在是正确的。
  • 看,我的最新答案,Sheshank。
  • 嗯,但现在它根本没有提交..
  • 没关系,它正在提交但遇到同样的问题。
猜你喜欢
  • 2017-07-16
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2014-12-15
相关资源
最近更新 更多