iOS 9 - 键盘事件未触发

时间:2015-10-15 15:46:40

标签: javascript jquery ios9 keyup onkeyup

是否有其他人在iOS 9中遇到keyup事件时遇到问题?

只是一个简单的测试床为我复制了这个问题。

<input id="txtInput" />

Vanilla JS:

document.getElementById('txtInput').onkeyup = function () {
    console.log('keyup triggered');
}

jQuery的:

$('#txtInput').on('keyup', function () {
    console.log('keyup triggered');
});

既不火......

3 个答案:

答案 0 :(得分:3)

我建议在带触摸屏的浏览器上使用keypress事件。我知道you can't really detect touch screen screens,所以它给你留下了一些你的情况可能要求的选项。

  1. 附加事件keyupkeypress。这可能取决于正在进行的处理量以及是否在某些浏览器中发生双重攻击。
  2. 尝试确定浏览器是否为触摸屏(例如使用Modernizr),然后附加后备处理程序,例如change
  3. 无论哪种方式,最终都会有两个事件监听器。

答案 1 :(得分:1)

$('#yourid').bind('keypress', function(e) {
    // This will work
});

答案 2 :(得分:0)

它不漂亮,但解决方法是绑定到keydown以捕获已按下的键,如果要获取值,则input,包括键入的键:

(function () {
    var keyCode;

    $('#txtInput')
        .on('keydown', function (e) {
            // value not updated yet
            keyCode = e.keyCode;

            // Enter key does not trigger 'input' events; manually trigger it
            if (e.keyCode === 13) $(this).trigger('input');
        })
        .on('input', function (e) {
            console.log(keyCode, this.value);
        });
}());

如果输入“a”,则会发生以下情况:

  1. keydown开火。
  2. e.keyCode设置为按下的键的ASCII值。
  3. this.value''(即在输入“a”之前相同)。
  4. input开火。
  5. e.keyCodeundefined
  6. this.value'a'
  7. 如果按下enter(13)键,您也可以手动触发input事件;默认情况下,此密钥不会触发input