有没有一种在各种浏览器中隐藏某些浏览器(如Chrome)为HTML数字输入渲染的新旋转框的一致方法?我正在寻找一种CSS或JavaScript方法来防止上下箭头的出现。
<input id="test" type="number">
以下是我更好的建议,在鼠标悬停和非悬停情况下:
input[type='number'] {
appearance: textfield;
}
input[type='number']::-webkit-inner-spin-button,
input[type='number']::-webkit-outer-spin-button,
input[type='number']:hover::-webkit-inner-spin-button,
input[type='number']:hover::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0; }
!important
可以强制隐藏旋转按钮。input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
/* display: none; <- Crashes Chrome on hover */
-webkit-appearance: none !important;
margin: 0; /* <-- Apparently some margin are still there even though it's hidden */
}
我仍然无法为Opera找到解决方案。
document.getElementById('myinput').type = 'text';
并且阻止用户输入文本;
document.getElementById('myinput').onkeydown = function(e) {
if(!((e.keyCode > 95 && e.keyCode < 106)
|| (e.keyCode > 47 && e.keyCode < 58)
|| e.keyCode == 8
|| e.keyCode == 9)) {
return false;
}
}
如果需要旋转器,则可以使用JavaScript将其更改回来。
document.getElementById('myinput').type = 'number';
它完美地满足了我的需求。
虽然不是你要求的内容,但我这样做是因为WebKit中旋转框存在焦点错误:
// temporary fix for focus bug with webkit input type=number ui
if (navigator.userAgent.indexOf("AppleWebKit") > -1 && navigator.userAgent.indexOf("Mobile") == -1)
{
var els = document.querySelectorAll("input[type=number]");
for (var el in els)
el.type = "text";
}
input[type='number'] {
-moz-appearance:textfield;
}
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
}
这会导致我走向
未知的伪类或伪元素“-webkit-outer-spin-button”。由于选择器错误,规则集被忽略。
每次尝试都是一样的。内部旋转按钮也是如此。
/* Disable Number Arrow */
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
我需要这个工作起来
/* Chrome, Safari, Edge, Opera */
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button
-webkit-appearance: none
appearance: none
margin: 0
/* Firefox */
input[type=number]
-moz-appearance: textfield
appearance: none
多了一行很重要。
display: none
起作用。/* Chrome, Safari, Edge, Opera */
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
display: none;
}
/* Firefox */
input[type=number] {
-moz-appearance: textfield;
}
感谢@philfreo在评论中指出。
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
<input id="test" type="number">
这就像你的 CSS 代码:
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
<input type="number" min="4" max="8" />
,并且看到一个带有上下箭头的典型输入框。 - calvinf<input type="number" pattern="[0-9]*" inputmode="numeric">
。更多信息请参见:https://dev59.com/XW025IYBdhLWcg3wKSiP#31619311。 - Aaron Gray<input type="text" placeholder="number (digits only)" pattern="[0-9]+" class="validate number-validation" ... >
的标记,并使用 jQuery Validati 或类似工具来处理验证。我尚未测试过这种方法,这也是为什么这是一条评论而不是答案的原因。 - Agi Hammerthief