2013-02-07 2 views
5

우선,이 작업을 완료하는 데 기본 JavaScript 만 사용하고 싶습니다.keydown에서 Javascript로 마우스 오버를 시뮬레이트하려면 어떻게해야합니까?

사용자 지정 드롭 다운을 만들고 HTML 코드가 이와 비슷하게 보입니다. CSS 파일에서

<div class="dropdown"> 
    <span class="dropdown-label" style="display:block">Select a thing</span> 
    <ul class="dropdownItemContainer"> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
    <li>Item 5</li> 
    <li>Item 6</li> 
    </ul> 
</div> 

나는이 가까이에 뭔가가 :

ul.dropdownItemContainer li:hover { 
    background-color: #FF0000; 
} 

그래, 정말 더 dropdownish 행동이 없다, 그러나 실제로 논의의 핵심이 아니다. 문제는이 드롭 다운에 키보드 컨트롤을 사용할 수있는 적절한 방법을 생각할 수 없다는 것입니다. 원하는 결과는 다음과 같습니다. 아래 키를 누르면 첫 번째 옵션이 강조 표시됩니다. 다시 한 번 누르면 두 번째 옵션이 강조 표시됩니다.

이 시점에서 방금 JS를 공부하기 시작한 유일한 옵션은 ul의 하위를 모두 가져 와서 배열에 붙여 넣은 다음 적절한 방식으로 JS 메서드를 통해 태그에 배경색을 지정하는 것입니다. 아래쪽 키를 누를 때마다

한편, 마우스 카운트 롤을 위해 CSS에 설명 된 : 호버 동작이 여전히 있습니다. 수평을 시뮬레이션하는 현명한 방법이 있습니까?

+1

키보드 탐색에 대한 예제는'많이 사용한다 : 초점 '. –

+0

jQuery 솔루션 만 내 마음에 온다 : ( –

답변

7
+0

+1 나는 이것을 당신의 코드 인 Loki와 병합 할 자유를 가져갔습니다. 이 답변을 수락 해주십시오. http://jsfiddle.net/samliew/Hd7X9/4/ –

+0

시간을 내 주셔서 감사합니다. –

+0

솔루션을 제공해 주셔서 감사합니다. 많은 시간 동안 동일한 문제로 어려움을 겪고있었습니다. –

1

라이브러리를 처음부터 코딩하는 대신 사용할 수 있습니다.

http://vebersol.net/demos/jquery-custom-forms/

http://www.dreamcss.com/2009/05/15-jquery-plugins-to-enhance-your-html.html

+0

답변 해 주셔서 감사합니다. 그러나 언급했듯이, 나는 공부하려고합니다. 네이티브 JS, 그래서 처음부터이 모든 것을 코드화하고 싶습니다 .JQuery는 많은 가능성과 사용자 정의 옵션을 제공하며, 멋지고 유용하다는 것을 인정합니다. 그러나 나는 결국 그것에 접근 할 것입니다. –

+0

If [jsfiddle] (http://jsfiddle.net)에서 링크를 제공하거나이를 다시 만들면 공동 작업 할 수 있습니다. –

+0

http://jsfiddle.net/Hd7X9/ - 여기 있습니다. 나는 당신을 페이스 북에 썼다. 내가 너에게 더 많은 배경을 줄 필요가있을 것 같아. –

0

현실 당신은 드롭 다운에 대한 모든 JS 필요하지 않았다하지만 당신은 그것을 시뮬레이션 자바 스크립트 이벤트를 사용할 수 있습니다. 당신은, 당신이 바인드, 클릭을 사용할 수 있습니다 가져가, 초점, 당신은 JQuery와에 설정된 이벤트

document.getElementById('id').addEventListener('focus',function(e){ 
    //place code that want ran at event happened 
    } 

를 들어이를 사용할 수 JS에서 온 클릭

같은 이벤트를 사용할 수 있습니다. ..

$('#id')bind('focus',function(e){ 
    //place code that want ran at event happened 
    } 

이벤트 목록

http://www.quirksmode.org/dom/events/index.html

+0

일반 목록 요소에 초점을 사용할 수 없습니다 ... – Christoph

+0

@Christoph 예 초점 이벤트를 사용할 수 있습니다 http://www.quirksmode.org/dom/events/index.html –

+1

글쎄, 포커스 요소가 지원된다는 사실 '창', 링크 및 양식 필드 만 기본적으로 초점을 맞출 수 있다는 사실을 변경하지 마십시오. 그렇지 않으면 요소에'tabindex'를 선언 할 필요가 있습니다. 그리고 포커스가 일관성있게 지원되지 않습니다. – Christoph

0

내가 CSS에서 호버 속성을 제거 제안 볼 수 있습니다. 그리고 키 누름과 마우스 오버

이 코드에서 다음과 같이 수에 적용됩니다 만 맴돌고 클래스를 추가는

var dropDown = document.getElementsByClassName("dropdownItemContainer")[0] 

document.addEventListener("keydown",function (e) { 
    if(e.keyCode == 38 || e.keyCode == 40) { 
     var key = e.keyCode 
     var hovered = dropDown.getElementsByClassName("hovered") 
     if(hovered.length != 0) { 
      cur = hovered[0] 
      cur.className = "" 
      cur = cur[(key==38?"previous":"next")+"ElementSibling"] || dropDown.children[key==38?dropDown.children.length-1:0] 
     } else { 
      cur = dropDown.children[key==38?dropDown.children.length-1:0] 
     } 
     cur.className="hovered" 
    } 
}); 


dropDown.addEventListener("mouseover",function (e) { 
    for(var i = 0,j; j = dropDown.getElementsByClassName("hovered")[i];i++) 
     j.className = ""; 
    e.srcElement.className = "hovered"; 
}); 

는 Heres는 JSFiddle

관련 문제