Javascript iOS上Safari中的Shift键
有没有办法在javascript中确定移动键盘上是否按下了shift键,并将其与caps lock(两次按下shift键)区分开来 首先,让我们来看一些关于iOS键盘的事实,我想你已经知道了:Javascript iOS上Safari中的Shift键,javascript,ios,safari,Javascript,Ios,Safari,有没有办法在javascript中确定移动键盘上是否按下了shift键,并将其与caps lock(两次按下shift键)区分开来 首先,让我们来看一些关于iOS键盘的事实,我想你已经知道了: 进入键盘模式时,shift键始终处于激活状态 Caps Lock必须手动激活(我想这并没有被广泛使用) iPhone Shift键处理 我对这个问题进行了一些调查,我发现: shift键不触发任何键事件 没有专门的iPhone浏览器API来检测是否按下shift键,除非是在iOS应用程序中(duh)
- 进入键盘模式时,
键始终处于激活状态shift
必须手动激活(我想这并没有被广泛使用)Caps Lock
键不触发任何键事件shift
- 没有专门的iPhone浏览器API来检测是否按下shift键,除非是在iOS应用程序中(duh)
- iOS触发的
、keydown
、keypress
事件看起来很正常,只是它们没有指示shiftKey的用法,并且除了时间戳和类型之外无法区分keyup
- 您无法在iOS中手动分派键盘事件,因为,
和keyCode
是只读的,并且始终设置为
。不可能重新触发键盘事件以获取有关shift键仍处于打开状态的指示0
- 实际上,iPhone将shift键视为某种短期大写锁定键。区别在于,通常情况下,您只需激活一次,它就会自动停用
<div id="wrapper">
<label for="test">ENTER SOMETHING HERE</label>
<input type="text" name="test" id="test"/>
</div>
<div id="warning"></div>
正如我所说,总比什么都不做要好,但如果您需要知道在用户不做任何输入的情况下按下了shift键,那么这不是一个解决方案。现在这似乎是不可能的。我认为这在Javascript中是不可能的。尽管目标C是可能的
这似乎是一个oooold问题:您需要通过iOS SDK还是通过网站来处理它?@MatrosovAlexander我假设是一个网站。在我的iPod 4.3中,根本检测不到shift键。
var isCaps = false,
isUppercase = false,
str = '',
test = document.getElementById('test'),
warning = document.getElementById('warning');
function capsDetection(e) {
// Since where on iOS, we at least don't have to care
// about cross-browser stuff
var s = String.fromCharCode(e.which);
isCaps = isUppercase;
// if the char doesn't match its lower case friend, and the shift key is
// not pressed (which is always the case on iOS, but we leave it there
// for readability), we have uppercase input
isUppercase = (s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey);
// if its the second uppercase input in a row, we may have caps lock input
isCaps = isCaps && isUppercase;
// set the warning
if (isUppercase && !isCaps) {
str = 'You where using the shift key';
}
else if (isCaps) {
str = 'Caps lock seems to be activated';
} else {
str = '';
}
warning.innerHTML = str;
}
// the right event properties are only available on keypress
test.addEventListener('keypress', capsDetection);