如何在移动浏览器上取消按键

时间:2018-10-19 19:31:33

标签: javascript events keydown

我拥有这个功能,可以在桌面浏览器上完美运行。它检查用户何时在邮政编码文本输入字段中按下键:

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浏览器都出现故障)。

2 个答案:

答案 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

但是,如果我插入断点并逐步执行它,我无法弄清它为什么起作用。