2013-10-18 1 views
5

휴대 기기에서 작동하는 html5 애플리케이션을 작성했습니다. 90 %의 시간은 잘 작동하지만 특정 기기 (대부분 Android 4.0 이상)에서는 클릭 이벤트가 두 번 발생합니다.페이지의 모든 클릭 이벤트를 가로 채거나 대체 할 수 있습니까?

저는 왜 이런 일이 발생하는지 알고 싶습니다. iScroll 4을 사용하여 네이티브 스크롤을 시뮬레이트하고 스크롤 내에서 발생하는 이벤트를 처리합니다. (533 행은 관심있는 경우 이벤트를 전달합니다) 대부분 잘 작동하지만 특정 장치에서는 iScroll 디스패치 이벤트와 요소에 첨부 된 원래 onClick 이벤트가 모두 실행되므로 클릭이 두 번 발생합니다. 이 장치가 발생하는 패턴을 찾을 수 없으므로 두 번 클릭하지 못하도록 대안을 찾고 있습니다.

나는 이미 문제를 해결하는 못생긴 해결책을 생각해 냈습니다. 나는 모든 클릭을 "handleClick"방법으로 감쌌다. 200ms보다 더 자주 실행하는 것은 허용되지 않는다. 그것은 유지하기가 정말 어려워졌습니다. 내가 동적으로 생성 된 컨텐츠를 가지고 있다면 거대한 엉망이되어 객체를 매개 변수로 전달하려고 할 때 상황이 악화됩니다.

var preventClick = false; 

function handleClick(myFunction){ 

    if (preventClick) 
     return; 
    setTimeout(function(){preventClick = true;},200); 

    myFunction.call(): 
} 

function myFunction(){ 

    ... 

} 

<div onclick='handleClick(myfunction)'> click me </div> 

나는 전체 페이지의 모든 클릭 이벤트를 가로 챌 수있는 방법을 찾기 위해 노력하고, 이벤트가 시작 여부를해야하는지 어떻게 든이 해결했습니다. 그렇게 할 수 있습니까?

클릭시 myFunction을 설정하지만 호출되기 전에 트리거 handleClick()? 지금은 custom events으로 경기 중입니다. 유망한 것으로 보이지만 전체 애플리케이션에서 모든 이벤트를 변경하지 않아도됩니다.

<div onclick='myfunction()'> click me </div> 

답변

6

당신은 다음과 같이 (그래도 난 그것을 권하고 싶지 않다) 것을 할 수 있습니다 : 당신이 목표를 알고 싶다면

$('body').on('click', function(event){ 
    event.preventDefault(); 
    // your code to handle the clicks 
}); 

이 브라우저에서 클릭의 기본 기능을 방지 할 수 있습니다 클릭만으로 event.target을 사용하십시오. preventDefault(); 앞에 클릭 확인을 추가하는 방법에 대한 아이디어는 this을 참조하십시오.

+0

이 – SparK

+0

@SparK _I've가 시도하고 모든 클릭을 취소 할 것이라고 ... 매개 변수가되지 않을 것 전체 페이지에서 모든 클릭 이벤트를 가로 챌 수있는 방법을 찾으십시오. 그리고 op가 찾고있는 것입니다. –

+0

@ Spark 그건 사실이 아니야. 이벤트는 다른 방향으로 전파되므로 먼저 div에서 이벤트가 시작되고 그 후 이벤트가 본문에서 실행됩니다. 이 코드는 몸체 외부/외부에있는 모든 것을 방지합니다. – caiocpricci2

0

속성에 대한 이벤트가 마음에 들지 않지만 그것은 저뿐입니다.

사고 JQuery와 : $(selector).click(function(){ <your handler code> } 당신은 같은 것을 할 수있는 : 물론

$(selector).click(function(event){ 
    handleClick(window[$(this).attr("onclick")]); 
}; 

+1

onclick은 html 이벤트 속성이 아니며 더 이상 지원되지 않을 예정입니다 (가까운 장래에). –

+0

또 다른 문제점은 클릭이있는 요소가 'a'라는 보장이 없다는 것입니다. 앵커, div, 목록, 스팬, 거의 모든 것이 될 수 있습니다. – caiocpricci2

+0

@ caiocpricci2 예, 선택기가 선택기를 변경할 수 있습니다 ... 아무 문제가 없습니다 ... – SparK

관련 문제