移动设备上的jquery mobile - keyup keydown

5
我需要一个输入框(type='text'),把用户输入的内容发送到服务器上验证其可用性。 我使用委托为元素添加事件处理程序:
$(document).delegate('#signup', 'pageshow', function() {
    var keydown = function(e) {
        e = e || window.event;
        var char = e.which || e.keyCode;
        if (char == 8) {
            $(".pagemessage").text("Pressed: '<BACKSPACE>'");
            appcheckDomainOnKeyDown();
        }
        return true;
    };

    var keyup = function(e) {
        e = e || window.event;
        var char = e.which || e.keyCode;
        if (char == 8) {
            appcheckDomainOnKeyUp();
        }
        return true;
    };

    var keypress = function(e) {
        e = e || window.event;
        var char = e.which || e.keyCode;
        var str = String.fromCharCode(char);
        $(".pagemessage").text("Pressed: '" + str +"'");
        if (/[a-zA-Z0-9-\._]/.test(str) || char == 8 || char == 9) {
            appcheckDomainOnKeyDown();
            appcheckDomainOnKeyUp();
            return true;
        }
        return false;
    };

关键处理程序在我的桌面上完美运行,但在移动设备上却不行。希望您能看到我正在尝试将某些字符输入到框中(并使用退格键删除字符)。
由于我看不到pagemessage元素更新的事实,“keypress”似乎没有被截取。我尝试在keyup/keydown中处理这个问题,但我不确定如何应用shiftKey位来获取实际按下的字符-例如,按+5将给出“%”,但在keydown中它返回shiftKey和5。
我阅读了文档,并且找到最接近“keypress”的是“tap”事件,但那也不起作用。
我尝试像这里的一篇帖子中建议的那样捕获“keypress”事件,在桌面上这不能捕获退格键,并且在移动设备上根本不起作用。
然后我尝试了另一个帖子中建议的方法:
    var inputEV = 'oninput' in window ? 'input' : 'keyup';
    $("#new_domain").off(inputEV);
    $("#new_domain").on(inputEV, function (e) {
        keydown(e);
        keyup(e);
    });

并且,在桌面浏览器或移动设备中都无法正常工作。我尝试将输入类型更改为“搜索”,并获得了一个漂亮的增强功能,按键确实会添加一个清除按钮...但在移动设备上对于我的自定义功能没有任何作用。我想我已经没有尝试的东西了,唯一剩下的就是添加一个按钮去检查-但没人想要那个 : )。有人知道我如何做到我所需的吗?如果相关的话,我正在使用chrome在我的台式机和Android设备(HTC one和Nexus 5)上。
1个回答

3

我刚刚更新了应用程序,使其可以将内容打印到div中,但似乎在我的设备上(e.which || e.keyCode)始终为零。还有哪些选项?我的问题似乎源于不想允许某些字符。虽然“keypress”不受支持,但是正确的位置...我可能需要添加一个keyup触发器来检查输入框的最后一个值,并在无效时将其删除...用户会看到这一点:( - Nigel Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接