2012-06-10 3 views
0

jQuery Mobile 및 PhoneGap을 사용하여 앱을 만들고 있습니다.jqm 통화 중 대기시 탭 이벤트 대기 중지

나는 무거운 처리를 수행하고로드 스피너를 표시하기 위해 "탭"의 버튼을 "위임"합니다. 사용자가 계속해서 내 앱을 탭하면 과도한 처리가 끝난 후 탭이 대기열에 들어가 앱이 처리되어 불필요한 항목을 클릭하게됩니다.

어떻게 방지 할 수 있습니까?

(내가 이해 이러한 새로운 사용자 이벤트는 한, stopImmediatePropagation 도움이되지 않습니다에서.)

감사

답변

0

그래서 그것을 알아낼 걸 렸어요 ... 당신은 부모 요소가 이벤트를 무시하도록 대리자 함수에서 FALSE를 반환합니다.아래의 반환 회선은 내 문제를 해결합니다.

$(document).delegate("#finish", "tap", onFinish); 

var onFinish = function() { 
    $.mobile.loadingMessage = "Finishing..."; 
    $.mobile.showPageLoadingMsg(); 

    setTimeout(function(){ 
     HEAVYPROCESSING(); 
     $.mobile.changePage($("#choosearticle")); 
     }, 50); 

    return false; // important - stops the two click fall through problem! 
} 
0

나는 당신의 자바 스크립트의 시작 버튼을 불 활성화되어 생각할 수있는 가장 쉬운 방법

$('#YourButton').addClass('ui-disabled'); 

함수 (또는마다의 끝에 당신이 그것을 다시 활성화 싶어 :

,617을 적합 때 기능은 다음을 재 활성화
$('#YourButton').removeClass('ui-disabled'); 
+0

답변 해 주셔서 감사합니다. 그 뒤에 복잡한 프로그램 방식으로 생성 된 jqm 목록이므로 저에게 매우 지저분한 해결책이 될 것입니다. 확실히 잡을 특히 실수로 클릭 할 수있는 모든 가능한 요소를 참조하지 않고 이러한 원치 않는 클릭을 삭제하는 간단한 방법이있다? – Alveoli

+0

앱이 생각할 때 클릭을 사용하지 않도록 설정하려는 전체 페이지가 있습니까? – Hessius

+0

예. 어떤 아이디어? – Alveoli

1

전체 페이지에서 비활성 탭을 사용하면 투명 div로 전체 페이지를 오버레이 할 수 있습니다. 경계선 해킹으로 간주 될 수도 있지만 실제로는 최소한의 js와 css를 사용합니다!

주의 할 점은 페이지가 비활성화되었음을 시각적으로 알려주지 않는다는 것입니다.

이렇게하려면 오버레이에 대해 반투명 회색을 사용하거나 아래에서 수행 한 것처럼로드 메시지를 표시하십시오.

먼저 작은 CSS 토론 :
전체 페이지 집합 너비와 높이를 100 %로 설정하십시오. 정확하게 배치하려면 position : absolute를 사용하고 투명 배경의 경우 rgba background-color 속성을 사용합니다 (아래 참조). -webkit-tap-highlight-color 특성을 사용하여 탭 콜 아웃 (tab-callout)을 제거하고 다른 모든 항목보다 위에 오도록 Z- 색인을 선언해야합니다 (필요한 경우 증가시킬 수 있음). 디스플레이를 none으로 설정 한 다음 무거운 작업 동안 그것을 표시하십시오.

나는 jsfiddle which hopefully clears things up을 만들었습니다.

여기에 위에 설명 된 속성이있는 "inactivator"라는 ID로 div를 만들었습니다. 또한 jQuery의 show 함수를 위임 한 id에 "inactivate"라는 버튼을 만들었습니다. jQuery Mobile의 기본 로딩 메시지를 추가하여 자유롭게 앱의 생각을 시각적으로 알려주는 역할도했습니다 (지연으로 오인하지 않았습니다).

로드 아웃 메시지와 "inactivator"가 5 초 후에 숨겨 지도록 시간 초과 기능을 추가했습니다. 분명히 귀하의 경우에는 동일한 코드가 5 초 후에가 아니라 "과도한 프로세싱"이 완료 될 때 해고되어야합니다.

(신규, 추가 답변을 내가 제대로 질문을 이해하지 못했지만 기존의 대답은 여전히 ​​다른 사람에게 도움이 될 수 있기 때문이다.)

+0

귀하의 포괄적 인 답변은 높이 평가됩니다. - 나는 가치있는 응답이있을 때 대답 할 것입니다! – Alveoli

+0

질문이 있으시면, – Hessius

+0

이 글을 쓰지 않은 최고의 답변이라고 분명히 밝힙니다.) 나는 효과가 보이는 방식을 좋아했으며 어쨌든 투명도 + 약간의 색조로 그것을 사용하게되었습니다. 이봐 요! 그것은 클릭 효과를 통해 '클릭 가을을 막지 않았다 수치심이야 .. Thx는 좋은 대답을 tho. – Alveoli