【问题标题】:onkeyup vs onchange for number type input数字类型输入的 onkeyup 与 onchange
【发布时间】:2017-02-14 22:54:34
【问题描述】:

我在处理表单上的数字输入时遇到了一个小问题,特别是在用户修改它们时尝试调用验证 js 函数时。

<input type="number" name="somenumber" onkeyup="validateForm()" />

该方法仅在用户在框中键入数字时调用,并且在用户使用浏览器提供的向上/向下按钮时被忽略。所以它并不完全有效。

<input type="number" name="somenumber" onchange="validateForm()" />

此方法非常适合使用向上/向下按钮的用户,但如果他们在框中输入数字,则在他们移动到另一个元素或在框外单击之前,它不会执行。这不是世界末日,但我希望用户能够在框中键入并立即能够单击当前禁用的提交按钮,而不必单击其他地方来启用该按钮。

<input type="number" name="somenumber" onchange="validateForm()" onkeyup="validateForm()" />

因此,为了获得最佳的用户体验,我正在这样做。问题是该函数经常被调用两次。我猜它工作正常。用户甚至没有注意到它运行了两次。不过,我似乎遗漏了一些东西,必须有一些“正确”的方法来处理这个问题。

有吗?或者这只是我们必须解决的问题之一?

【问题讨论】:

    标签: javascript html validation


    【解决方案1】:

    您可以使用oninput 事件。

    function validateForm() {
      console.log('changed');
    }
    &lt;input type="number" name="somenumber" oninput="validateForm()" /&gt;

    【讨论】:

    • 太完美了。我的开发环境一定有点过时了。它从未听说过 oninput 并将其标记为未知属性。
    • @K Scandrett : 如何在 JS 中制作函数?
    • @K 现在可以了,伙计。我看到了一个示例$("#ID").on('input',function(){ /* */ });。谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多