2012-02-15 4 views
1

tabIndex를 사용하여 2 차원 탐색을 사용하여 Windows CE 용 페이지를 만들었습니다. 처음에는 tabIndex를 다음 포커스의 참조로 사용하기를 원했습니다.javascript 또는 JQuery에서 트리거 또는 리턴 시프트 + 탭

이 응용 프로그램은 휴대용 장치 용이므로 핸드 헬드에서 매우 까다 롭고 간단한 탭과 이동 + 탭과 비교할 때 매우 많은 시간이 소요됩니다.

내가 내 위쪽 화살표 내 셀인에 대한 화살표, 아래에 onKeyDown을 처리하는 기능을 가지고, 코드는

if(specialMove == 0){이 모든 수행이 탭 페이지를 떠나지 않을 것을 확인 간단합니다.

event.keyCode=9; return;}

문제가 내가이 위쪽으로 이동하기 위해 SHIFT + TAB을 반환하려면, 내 UPARROW, 내가 jQuery 코드의 snipet을 발견하지만 난 그것을 작동하게하는 데 문제가 있어요.

if(specialMove == 0){ 
    $('body').trigger(JQuery.Event('keydown', {keyCode:9, shiftKey: true})); 
    return; 
} 
+0

어떤 CE 버전/장치/브라우저를 사용하고 있습니까? –

+0

내가 기억한다면 CE 2.0, MC9090 및 IE6 –

답변

1

트리거는이 경우 본문에 정의 된 이벤트 처리기 만 호출합니다. 브라우저에 키 코드를 보내지 않습니다. 참조 : http://api.jquery.com/trigger/. 즉, keydown 이벤트의 경우 jQuery가 알고있는 코드 만 실행합니다. 그것은 keydown 이벤트를 '시뮬레이트'합니다.

브라우저에 키 이벤트를 보내는 것은 내가 아는 한 불가능합니다. 이는 심각한 보안 위험이 따르기 때문입니다. Javascript에서 다음 요소와 이전 요소를 선택하여 구현해야합니다.

편집 : 당신은 같은 것을 시도 할 수 :

$(function() { 
    var navigationElements = $('[tabIndex]').sort(function(a,b) { 
    return $(a).attr('tabindex') - $(b).attr('tabindex'); 
    }); 

    // We don't know if the users presses the up or down button first 
    // so we initialize as null and let the event handle the first element 
    var currentIndex = null; 

    // On event: 
    if (currentIndex != null && currentIndex < navigationElements.length - 1) { 
    navigationElements[++currentIndex].focus(); 
    } else { 
    currentIndex = 0; 
    navigationElements[currentIndex].focus(); 
    } 

    // and: 
    if (currentIndex != null && currentIndex > 0) { 
    navigationElements[--currentIndex].focus(); 
    } else { 
    currentIndex = navigationElements.length - 1; 
    navigationElements[currentIndex].focus(); 
    } 
}); 

이것은 테스트되지 않은, 최적화되지 않은 코드를, 그래서 아마 훨씬 더 나은 솔루션이 있지만,이 경우에도 느린 브라우저에서 꽤 빨리 작동합니다. 이벤트를 거치지 않는 포커스 변경을 고려하지 않으므로 onfocus 이벤트를 추가하여 currentIndex을 사용자가 마지막으로 선택한 요소로 설정해야합니다.

+0

하지만 이전 (또는 다음) 입력을 찾고 tabIndex로 정렬하여 이벤트를 사용하여 포커스를 이동할 수 있습니다. 실제로 그것은 비 접촉 식 전화의 모바일 사이트에 매우 유용 할 것입니다. – Dave

+0

나는 그 다음 요소 나 이전 요소가 절대로 선택되지 않을 것이므로 의심 스럽다. 선택할 수있는 모든 요소를 ​​찾아 DOM 및/또는 탭 인덱스의 위치별로 정렬 한 다음 현재 선택된 항목을 기준으로 트리를 위아래로 이동해야합니다. 데스크톱이나 현대적인 모바일 브라우저, Windows CE에서 할 일은 간단합니까? 나는 확실하지 않다 ... –

+0

지금 당장하고있는 일은 내 탭이 tabindex에 의해 정렬되고'$ ('[tabIndex ='+ currIndex + ']'를 사용하여 다음 탭 색인을 검색한다.); '하지만이 방법을 사용하면 두 번째 지연이 생기기 때문에 너무 길어서 getelementbyid 나 class가 jquery 명령보다 빠른 검색 방법인지는 알 수 없습니다. –