如何在移动浏览器上取消 keydown
how to cancel keydown on mobile browsers
我有这个在桌面浏览器上完美运行。它检查用户何时按下邮政编码文本输入字段中的键:
zip_field.addEventListener(
'keydown',
function(evt){check_zip({evt:evt, zip_field: zip_field, submit_button: submit_button})},
false
)
check_zip 函数在底部有这个,如果用户键入字母等,可以取消按键:
if(prevent_key)
{
evt.preventDefault()
evt.stopPropagation()
return false;
}
在移动浏览器上,if 语句的处理方式与在桌面浏览器上的处理方式相同,但它仍然允许字符通过。但是,如果我放入断点并单步执行代码,它就可以正常工作!
我在 Chrome 和 Android 上的 Firefox 中进行了测试,两者都发生了这种情况。我还需要在移动设备上执行其他操作才能 prevent/cancel 密钥并防止它出现在输入框中吗?
更新:我能够在 iPhone 上进行测试,它在那里正常工作。所以它只在 Android 上坏了(FF、Chrome 和三星浏览器都失败了)。
evt的访问方式有误。
evt 在您的代码中以对象形式传递给 check_zip() 的参数。
那么你应该这样访问。
function check_zip(param) {
...
if (prevent_key)
{
param.evt.preventDefault()
param.evt.stopPropagation()
return false;
}
}
在创建精简测试页后,我发现 Chrome 总是将使用 Android 键盘按下的键解释为 keydown 事件中的 keyCode 229。如果我用 USB 线将我的 phone 插入我的电脑,我在桌面键盘上按下的键使用了正确的键码,但 phone 的虚拟键盘上的键码都是 229。研究我发现了这个:
keyCode on android is always 229
但是,如果我在其中放置断点并逐步执行它,我无法弄清楚为什么它会起作用。
我有这个在桌面浏览器上完美运行。它检查用户何时按下邮政编码文本输入字段中的键:
zip_field.addEventListener(
'keydown',
function(evt){check_zip({evt:evt, zip_field: zip_field, submit_button: submit_button})},
false
)
check_zip 函数在底部有这个,如果用户键入字母等,可以取消按键:
if(prevent_key)
{
evt.preventDefault()
evt.stopPropagation()
return false;
}
在移动浏览器上,if 语句的处理方式与在桌面浏览器上的处理方式相同,但它仍然允许字符通过。但是,如果我放入断点并单步执行代码,它就可以正常工作!
我在 Chrome 和 Android 上的 Firefox 中进行了测试,两者都发生了这种情况。我还需要在移动设备上执行其他操作才能 prevent/cancel 密钥并防止它出现在输入框中吗?
更新:我能够在 iPhone 上进行测试,它在那里正常工作。所以它只在 Android 上坏了(FF、Chrome 和三星浏览器都失败了)。
evt的访问方式有误。 evt 在您的代码中以对象形式传递给 check_zip() 的参数。 那么你应该这样访问。
function check_zip(param) {
...
if (prevent_key)
{
param.evt.preventDefault()
param.evt.stopPropagation()
return false;
}
}
在创建精简测试页后,我发现 Chrome 总是将使用 Android 键盘按下的键解释为 keydown 事件中的 keyCode 229。如果我用 USB 线将我的 phone 插入我的电脑,我在桌面键盘上按下的键使用了正确的键码,但 phone 的虚拟键盘上的键码都是 229。研究我发现了这个:
keyCode on android is always 229
但是,如果我在其中放置断点并逐步执行它,我无法弄清楚为什么它会起作用。