我拥有这个功能,可以在桌面浏览器上完美运行。它检查用户何时在邮政编码文本输入字段中按下键:
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语句的处理方式与台式机浏览器一样,但是仍然允许字符通过。但是,如果我输入断点并逐步执行代码,它将正常工作!
我在Android上的Chrome和Firefox中进行了测试,并且两者都发生了。我还需要在移动设备上做些其他事情来防止/取消按键并阻止其出现在输入框中吗?
更新:我能够在iPhone上进行测试,并且可以在iPhone上正常运行。因此,只有在Android上它才损坏(FF,Chrome和Samsung浏览器都出现故障)。
答案 0 :(得分:0)
访问evt的方式是错误的。 evt在您的代码中以对象形式传递给check_zip()的参数。 然后,您应该像这样访问。
function check_zip(param) {
...
if (prevent_key)
{
param.evt.preventDefault()
param.evt.stopPropagation()
return false;
}
}
答案 1 :(得分:0)
在创建一个精简的测试页之后,我发现Chrome始终在keydown事件中将使用Android键盘按下的键解释为keyCode 229。如果我使用USB电缆将手机插入计算机,则我在台式机键盘上按的键将使用正确的键码,但电话的虚拟键盘上的键码均为229。经过进一步研究,我发现:
keyCode on android is always 229
但是,如果我插入断点并逐步执行它,我无法弄清它为什么起作用。