2011-10-07 3 views
6

jQuery 1.6.4, iOS 5 및 touchstart/touchend 이벤트 등록 문제가 있습니다 (제목에 명시된 바와 같이).iOS 5의 jQuery 이벤트

<!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"버튼은 아이폰 OS 4.3에서 iOS 5에서 경고를 표시하지만, "jQuery를"버튼은 아이폰 OS 4.3에서 작동 :

다음 코드를 가져 가라. iPad/iPhone 시뮬레이터 4.3 및 5에서 테스트되었습니다. 실제 iPhone 4.3, iPhone 5.0 및 iPad 5.0에서도 테스트되었습니다. <input type="button"> 또는 <button> 대신 간단한 <a>을 사용하는 경우에도 같은 반응이 나타납니다.

내가 믿는 것처럼 jQuery와 관련된 문제입니까? 애플 dev에 포럼에 사람에 의해 응답

+0

바인드 사용하지 않는 ('touchstart를') ontouchstart = "". 그들 중 하나를 사용하고, 인라인 자바 스크립트를 사용하지 않는 것을 선호합니다. –

+1

jQuery가 작동하지 않을 때 인라인 JS가 작동한다는 것을 보여주는 개념 증명이되었습니다. 물론 필자는 인라인 JS를 실제 코드로 사용하지 않습니다. – Cyrille

+0

jQ 1.5.2 및 click 이벤트로이 오류를 생성 할 수 있었으므로 제목을 "iOS 5의 jQuery Events"처럼 수정해야합니다. – webXL

답변

8

: 그래서처럼 만 후 요소가 DOM에 추가되었습니다) (바인드해야합니다

var btn = $('<a>').html('test jQuery').appendTo($body); 
btn.bind('touchstart', function(e) { alert('touchstart'); }); 
+2

bind() 대신 live()를 사용하면 어떻게됩니까? ? iOS 5에서 작동이 중지 된 이유에 대한 설명이 있습니까? – Crashalot