【问题标题】:safari iphone ios 7 Freezes on input text focusSafari iphone ios 7 冻结输入文本焦点
【发布时间】:2014-03-18 06:33:44
【问题描述】:

我们有一个复杂的应用程序表单,其中包含大量字段和 jquery 事件。问题与iOS 7 Safari: OS locks up for 4 seconds when clicking/focusing on a HTML input 类似,但在我们的例子中,它完全冻结并且永远无法恢复工作。

这个问题只出现在 iphone 的 safari 中,有人有同样的问题和解决方法吗?谢谢

【问题讨论】:

  • 发布你的代码而不是描述深蓝色。
  • 嗨 C-link,这次不是。表格太大,无法分析。我不希望任何人分析代码。我真的认为这是一个 IOS 7 错误。我只是在检查是否有人遇到了同样的问题并有解决方案。

标签: jquery ios iphone safari


【解决方案1】:

使用 Binke 的解决方案修复了触摸事件的延迟,但是在按键时延迟仍然存在,因此捕获 keypress 和 keydown 事件对我来说解决了这个问题。我必须使用 keypress 事件来区分大写和小写字母,但删除/退格需要 keydown 事件。这基本上只是捕获按下的键并将其放入输入框中(或删除最后一个字符以进行退格/删除)。 selectors 变量应包含 jquery 选择器,该选择器将包括导致冻结的所有输入。这是我们使用的代码:

    var scroll = 0;    
    var selectors = "#input1, #input2, #input3";
    $(selectors).bind("touchstart", function (e) {
        scroll = document.body.scrollTop;
    });
    //I stripped away some of Binke's code because we were only having an issue with INPUT controls
    $(selectors).bind("touchend", function (e) {
        if (scroll == document.body.scrollTop) { 
            if (e.target.nodeName.toString().toUpperCase() == 'INPUT') {
                e.preventDefault(); 
                e.target.focus();  
                e.target.setSelectionRange(e.target.value.length, e.target.value.length);
            } 
        }
    });
    $(selectors).bind('keydown', function (e) {
        //alert(e.which);
        if (e.which == 8 || e.which == 46) { // BACKSPACE OR DELETE
            $(this).val($(this).val().substring(0, ($(this).val().length - 1)));
            return false;
        }
        else { return true; }
    });
    $(selectors).bind("keypress", function (e) {
        if (e.which != 8 && e.which != 46) {
            $(this).val($(this).val() + String.fromCharCode(e.which));
        }
        return false;
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-02
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多