防止箭头键更改数字输入中的值

时间:2014-06-12 19:20:43

标签: html input

我在网页上有一个输入控件,类似于:

<input type="number" name="value" />

如果此控件具有焦点并且我按下向上或向下箭头键,则文本框中的值递增或递减(IE中除外)。我想禁用此功能,最好使用CSS。我已经使用CSS删除了微调按钮。我意识到我可以使用JavaScript来捕获keydown事件,但我想允许箭头键继续向上或向下滚动页面。

5 个答案:

答案 0 :(得分:14)

没有办法完成你纯粹用CSS描述的行为,因为CSS处理显示,我们在这里谈论行为和键盘事件。

我建议在你的输入中添加一个事件监听器,它会阻止箭头键对它产生影响,而实际上阻止了输入的页面滚动不在焦点上:

document.getElementById('yourInputID').addEventListener('keydown', function(e) {
    if (e.which === 38 || e.which === 40) {
        e.preventDefault();
    }
});

如果输入是焦点,如果你想要箭头键滚动页面事件,我建议你使用JQuery,它可以让你编写更少的代码,它将支持所有的浏览器。

答案 1 :(得分:1)

您可以使用以下代码


HTML

<input type="number" min="1.01" max="1000" id="num"/>

CSS

input[type=number]::-webkit-inner-spin-button, 
input[type=number]::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

JavaScript的:

$(document).ready(function() {
$("input[type=number]").on("focus", function() {
    $(this).on("keydown", function(event) {
        if (event.keyCode === 38 || event.keyCode === 40) {
            event.preventDefault();
        }
     });
   });
});

您可以在此处找到工作示例:http://jsfiddle.net/649d66bb/

答案 2 :(得分:0)

如果你使用 angular 试试这个

答案 3 :(得分:-1)

我知道这不是你想要听到的答案,但这是你应该做的事情吗?

仅仅因为,在这种情况下,它不适合,你似乎违背了浏览器和用户的预期行为,试图操纵某些东西去做它没有做的事情。

作为用户,标记到字段并能够使用向上和向下箭头来更改值是预期的行为。例如点击徽标会带您回家,或按Cmd / Ctrl + W关闭窗口。如果有任何事情干扰了这一点,你最终会疏远用户,他们会对你的界面失去信心。

即使使用标准type="text"框,向上和向下箭头也不会滚动页面,此功能似乎与标准的所有内容相悖。

说你没有给出这个问题的上下文,它可能是内部工具或私人使用,在这种情况下,JS看起来像是要走的路!

答案 4 :(得分:-3)

哦,我只能通过keydown监听器和以下过滤器来实现:

const invalid = ['e', ',', '.', 'ArrowUp', 'ArrowDown'];
if (invalid.find(e => $event.key === e)) {
  $event.preventDefault();
}

就我而言,我也想禁止这些字符:e , .