#jquery #ios #touchstart
#jquery #iOS #сенсорный запуск
Вопрос:
У меня возникла проблема с jQuery 1.6.4, iOS 5 и регистрацией событий touchstart / touchend (как указано в названии, очевидно).
Возьмите следующий код:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<script type="text/javascript" src="mmpa/jquery-1.6.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var $body = $('body');
$('<button>').html('test jQuery').bind('touchstart', function() { alert('touchstart'); }).appendTo($body);
});
</script>
</head>
<body>
<button ontouchstart="alert('touchstart');">test pure JS</button>
</body>
</html>
Кнопка «чистый JS» отображает предупреждение в iOS 4.3 и iOS 5, но кнопка «jQuery» работает только в iOS 4.3.
Протестировано на iPad / iPhone simulator, 4.3 и 5; также протестировано на реальных iPhone 4.3, iPhone 5.0 и iPad 5.0.
Та же реакция, если я использую a <input type="button">
или даже простое <a>
вместо a <button>
.
Это проблема, связанная с jQuery, как я полагаю?
Комментарии:
1. не используйте bind(‘touchstart’) и ontouchstart=»». Используйте один из них и предпочитайте не использовать встроенный javascript.
2. Это было доказательством концепции, чтобы показать, что встроенный JS работает, когда jQuery этого не делает. Конечно, я никогда, никогда не использую встроенный JS в реальном коде.
3. Я смог выдать эту ошибку с помощью jQ 1.5.2 и события click, поэтому, возможно, вам следует изменить заголовок, чтобы он был чем-то вроде «События jQuery в iOS 5»
Ответ №1:
Ответил парень на форумах разработчиков Apple: мне нужно bind () только после добавления элемента в DOM, например:
var btn = $('<a>').html('test jQuery').appendTo($body);
btn.bind('touchstart', function(e) { alert('touchstart'); });
Комментарии:
1. Что произойдет, если вы используете live() вместо bind()? Любое объяснение, почему он перестал работать в iOS 5?