检测用户是否有物理键盘的最可靠方法是什么?
一个想法是,因为没有物理键盘window.onkeydown可能是未定义的(而不是null).但是由于虚拟键盘,我认为情况并非如此.我没有测试过.
我的目标是如果用户没有键盘,则用轮式选择器替换Online Timer的输入[type =’number’].
解决方法
对于像微软Surface这样配备键盘,鼠标和触摸屏的设备,这非常棘手.并且您可以在任何给定时间混合所有3种输入模式,或添加另一种输入方法,如手写笔.
Microsoft正在采用将输入事件抽象为“指针事件”的方法.这个型号has been submitted to the W3C.这应该让您了解管理输入的趋势.
尽管如此,我发现看看触摸是否可用并且在假设 – 如果是 – 用户将至少在某些时候使用触摸输入的情况下操作是很方便的.这可能导致设计决定消除完全触摸不友好的东西,即使这可能意味着对鼠标/键盘功能的妥协.
在您的具体情况下,我会仔细研究您是否需要用自定义控件替换输入[type = number].大多数触摸设备都相当现代,许多都具有标准HTML输入的自定义触摸友好版本.
还要记住本机控件可能支持“开箱即用”的可访问性场景.
如果您决定实现自定义控件,那么我会建议检测触摸功能并显示您的自定义控件是否存在其他输入机制.这意味着确保自定义控件(至少)触摸/键盘/鼠标友好.
这是我目前的触摸测试(免责声明明天可能会破坏,当然还没有在每台设备上测试过):
var supportsTouch = ("ontouchstart" in window) || window.navigator.msMaxTouchPoints > 0;