2012-08-12 5 views
3

다른 사람의 조언에 따라 iOS에서 기본 앱 수신 거부 기능을 사용 중지하기 위해이 모바일 환경 webapp에 $('body').on('touchstart', function(event){ event.preventDefault() }) 행을 추가했습니다. 바운스를 사용하지 못하게하는 데는 효과적이지만 DOM의 다른 곳에서는 이상한 행동을합니다.event.preventDefault()가 DOM에 정확히 얼마나 영향을 줍니까?

Click 이벤트가 작동하지 않는 등의 이벤트를 클릭하십시오.이 기능과 DOM의 다른 곳에서의 효과를 해결하는 방법에 대해 더 잘 이해하고 싶습니다.

감사합니다.

편집 : 나는 preventDefault 줄을 주석으로 경우

$('body').on('touchstart', function(e){ e.preventDefault() }; 
    $('#home').on('click', function(){ alert('home') }; 

는 다음 #home 라인이 작동합니다

나는이 두 가지 라인이있다. #home 행에 남겨두면 응답하지 않습니다. #homebody에 중첩 된 div 일뿐입니다.

이 동작의 원인은 무엇입니까? 더 큰 코드베이스의 일부이므로 모든 세부 정보를 제공하기가 어렵지만 시작할 위치를 알지 못합니다.

감사합니다.

+1

이것은 기본 JavaScript가 아니며 [jQuery preventDefault 메서드] (http://api.jquery.com/event.preventDefault/)입니다. –

+1

@ShadowWizard 사실 그것은 https://developer.mozilla.org/en-US/docs/DOM/event.preventDefault입니다. – Niko

+2

@Niko : jQuery 객체에서 호출 할 때 네이티브 메소드가 아닙니다 : https : // github .com/jquery/jquery/blob/master/src/event.js # L666 – Blender

답변

12

e.preventDefault()은이 개체에 대해이 이벤트에 대한 기본 동작이 있으면 해당 기본 동작을 건너 뜁니다.

예를 들어 기본 동작이 양식을 제출하는 제출 단추가 있고 해당 단추에 preventDefault()을 수행 한 클릭 처리기가있는 경우 브라우저는 단추가있을 때 양식을 제출하지 않습니다. 클릭 함. 이 기능은 사용자가 오류 메시지를 표시하고 양식을 서버에 제출하지 않으므로 양식의 유효성을 검사하지 않는 경우에 사용됩니다.

또는 다른 예. 링크에 대한 클릭 핸들러를 설정하고 클릭 핸들러에서 e.preventDefault()을 호출하면 브라우저는 링크 클릭을 처리하지 않고 링크의 href를 따르지 않습니다.

+0

훌륭한 답변 jfriend00을 주셔서 감사합니다. 제 편집을보고 무엇이 그 원인이 될 수 있는지 알 수 있습니까? – fancy

+0

예를 들어 'click'이벤트 거품과 같이 언급할만한 가치가있을 수 있습니다. 따라서 '터치 시작'이 다른 곳에서 실행되면 OP 코드에 의해 취소 될 수 있습니다. 그리고 흥미로운 점은, iOS ist가 (거의 - 잘 모르겠다) 페이지 이동, 줌 등 모든 터치 이벤트에 대해 촉발 된 것입니다. – insertusernamehere

+0

@insertusernamehere 아이디어가 있으면 더 많은 정보를 게시했습니다. 그것은 더 큰 코드베이스의 일부이지만 어디에서부터 시작해야할지 모르겠습니다. 감사. – fancy

관련 문제