휴대 기기에서 작동하는 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>
이 – SparK
@SparK _I've가 시도하고 모든 클릭을 취소 할 것이라고 ... 매개 변수가되지 않을 것 전체 페이지에서 모든 클릭 이벤트를 가로 챌 수있는 방법을 찾으십시오. 그리고 op가 찾고있는 것입니다. –
@ Spark 그건 사실이 아니야. 이벤트는 다른 방향으로 전파되므로 먼저 div에서 이벤트가 시작되고 그 후 이벤트가 본문에서 실행됩니다. 이 코드는 몸체 외부/외부에있는 모든 것을 방지합니다. – caiocpricci2