禁用 HTML 5 的日期选择器 输入类型='日期'



在一个具有多个输入字段<input type="date" />的web应用程序上,我收到了用户的各种投诉,他们觉得Android日期选择器令人困惑。他们不知道如何选择年份,我不得不承认:这真的不明显(示例图(。

我尝试了一个简单的文本字段和正则表达式验证的变通方法,但它很复杂,容易出错(闰年等(

有没有办法禁用日期选择器小部件(通常或仅在移动设备上(,同时保留iputtype="date"和可访问的键盘输入选项?

(这个问题或多或少与这个问题相反。(

尝试使用以下css规则。(注意,这只适用于基于WebKit的浏览器。(

之前:

<input type="date" />

之后:

input::-webkit-calendar-picker-indicator{
display: none;
}
input[type="date"]::-webkit-input-placeholder{ 
visibility: hidden !important;
}
<input type="date" />

尝试这个

<input type="date" onkeydown="return false" />

<input type="date" onKeyDown={(e) => e.preventDefault()} .... />

现在,您可以选择执行此脚本,通过检查类似的浏览器用户代理,将日期输入类型转换为仅适用于移动浏览器的文本

(function () {
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)) {
var inputs = document.querySelectorAll("input[type=date]");
for (let i = 0; i < inputs.length; i++) {
inputs[i].setAttribute("type", "text");
}
}
})();

我以前也遇到过同样的问题。安卓系统的一个版本有这个奇怪的日历界面。所以我不得不使用Jquery ui日期选择器插件,这样它就可以增强日历功能,获得更好的ui。

要禁用日期选择器小部件,您应该使用:

<input type={'date'} onClick={(e) => e.preventDefault()} />

您可以使用类似的东西来确定操作系统是否是android,然后通过将新类附加到元素来将弹出窗口的显示属性设置为none

以下示例仅适用于android,或者用户代理的名称中包含android

注意:请使用开发者工具更改useragent。

window.addEventListener('DOMContentLoaded', (event) => {
let userAgent = navigator.userAgent.toLowerCase();
let Android = userAgent.indexOf("android") > -1;

if(Android) {
let dateInputs = document.querySelectorAll('input[type=date]');
Array.from(dateInputs).map((input)=>{
input.classList.add('disableDatePickerPopup')
})
}
});
.disableDatePickerPopup::-webkit-calendar-picker-indicator{
display:none;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="date" name="" id="">
</body>
</html>

没有一个答案直接解决了我的问题,这就是为什么这个问题仍然有待解决的原因。对于任何偶然发现它的人,我提供这个答案作为我最终所做事情的更新。

在我看来,除了使用外部日期选择器(例如jQueryUI(之外,目前还没有一个很好的解决方案来统一HTMLinput type="date"的用户输入,这有其自身的缺点。所以我做的是:

  • 将输入更改为type=";文本">
  • 设置maxlength="10"minlength="10"
  • 设置placeholder="DD.MM.YYYY"
  • 设置pattern="[0-9]{2}.[0-9]{2}.(19|20)d{2}$"
  • 通过python的箭头库验证用户输入,但也可以通过JavaScript进行验证(请参阅此处(

最新更新