События jQuery в iOS 5

#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?