我们有一个包含大量字段和jquery事件的复杂应用程序表单。这个问题类似于iOS 7 Safari:当点击/专注于HTML输入时,操作系统锁定4秒,但在我们的情况下,它完全冻结并且永远不会恢复工作。
这个问题只发生在iphone的safari中,有人有同样的问题和解决方案吗?由于
使用Binke的解决方案修复了触摸事件的延迟,但当按键时仍然存在延迟,所以捕获按键和按键事件对我来说解决了这个问题。我必须使用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;
});