2009-03-22 5 views
6

PhoneGap 앱의 링크에 실시간 이벤트를 바인딩하고 있습니다. 이벤트가 성공적으로 실행되었지만 (alert() 인 경우) 이벤트 데이터에 첨부 된 모든 터치 데이터가 있어야하는 것처럼 보입니다. 이는 모든 터치 이벤트 (touchstart, touchmovetouchend)에서 발생합니다.jQuery live() iPhone 터치 이벤트 속성을 제거 하시겠습니까?

$('a').live('touchend', function(event) { 
    event.preventDefault(); 
    alert(event.touches.length); // event.touches should be populated! 
}); 

아이디어가 있으십니까? jQuery.live()와 SOL입니까?

답변

2

터치 이벤트는 현재 Events/live에 의해 지원되지 않습니다.

가능한 이벤트 값 : 문서에서

, 흐림을 : 클릭 dblclick, mousedown, mouseup에, 에서 mousemove, 마우스 오버, 마우스를 이동하면은, 를 keyDown, 키를 누를 때,

는 현재 지원되지 않습니다의 keyup 포커스, mouseenter, mouseleave, change, submit

클릭하면 사용하는 것이 좋습니다. if 귀하의 필요에 맞게 또는 livequery으로 전환 할 수 있으며 아마도 지원할 것입니다. (livequery는 원래 라이브를 기반으로 한 것이므로 동일한 이벤트를 모두 지원하지 않는 이유가 확실하지 않습니다.)

+0

내가 livequery을하려고합니다, 감사합니다. 터치 이벤트가 잡히고있는 것처럼 보였습니다. 꽤 잘 지원되었지만, 모든 이벤트 속성을 따라가는 뭔가가 추가로 발생해야합니다. – ceejayoz

+0

나는 livequery가 타이머를 사용한다고 믿는다. 그래서 그것이 훨씬 더 많은 것을 지원할 수있다. jQuery 팀은보다 효율적이지만 제한적인 다른 방법을 사용했습니다. – Jab

16

실제로 .live 메서드를 사용할 수 있습니다. jQuery가 이벤트를 내부적으로 처리하는 방식 때문에 event.touches 속성이 없습니다. 이벤트를 "수정"하기 위해 jQuery는 이벤트를 복제합니다. 이렇게하면 성능상의 이유로 제한된 수의 속성 만 복사합니다. 그러나 event.originalEvent 속성을 통해 원래 이벤트 객체에 계속 액세스 할 수 있습니다.

그래서 귀하의 예제 코드는 다음과 같이해야합니다 : 여기

$('a').live('touchend', function(event) { 
    event.preventDefault(); 
    console.log(event.originalEvent.touches.length); 
}); 

는 복사 된 속성입니다 : http://github.com/jquery/jquery/blob/master/src/event.js#L411

+0

이것은 새로운 jQuery 1.4에서 나타난 것처럼 보입니다. 1.3의 경우는 아니었다. – ceejayoz

+1

jQuery 1.3.x는 동일한 수의 공통 속성을 복사하고 원본 이벤트를 originalEvent 속성으로 노출하는 동일한 동작을했습니다. 관련 소스 : http://github.com/jquery/jquery/blob/1.3/src/event.js#L282 –