2012-11-15 41 views
0

我有一个下拉菜单,我需要我键盘访问,但不知道如何去做。在我的CSS我有一个:专注于所有的链接。我假设在javascript/jquery中使用onfocus会是最好的,而不是将tab键硬编码到JavaScript中,对吗?如果是这样,我会怎么做代码来使用焦点选择器?当有人选中它时,菜单需要放弃,然后当它们退出时(或者他们可以按下退出键,因为有超过40个链接),它需要关闭(需要像mousingover/mousingout那样)。 Example Menu如何让我的下拉菜单键盘可以访问?

if (ie === "1") { 
if ($(window).width() > 949) { 

$.fn.pause=function(a){$(this).stop().animate({dummy:1},a);return this}; 
function mouseleft(){$("#buttonbar").triggerHandler("mouseleave")} 
$(document).ready(function() 
    {$("#buttonbar").mouseenter(function(){$(this).stop().pause(160).animate({height:"12.7em"},400,"easeOutQuart")}).mouseleave(function(){$(this).stop().pause(160).animate({height:"2.2em"},400,"easeOutQuart")});});$(function(){$("#accordion").accordion({fillSpace:!0,icons:{header:"accordion-header",headerSelected:"accordion-headerselected"}})}); 
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) { 
    $("#buttonbar li").bind('touchstart', function(){ 
     console.log("touch started"); 
    }); 
$("#buttonbar li").bind('touchend', function(){ 
     console.log("touch ended"); 
    }); 
} 
else { 
$("#accordion").accordion({active:false}); 
} 
} 

function showElement(d){ 
    var s=document.getElementById(d).style; 
    if ($(window).width() < 950) { 
    if (s.display != "block") { s.display = "block"; } else { s.display = "none"; } 
    if ($(window).width() > 949) { 
    if (s.display != "block") { s.display = "block"; } 
    } 
} 
} 
function showHide() { 
    var s=document.getElementById("buttonbar").style; 
    if ($(window).width() > 949) { 
    s.display = "block"; 
    document.getElementById("prospective-links").style.display = "block"; 
    document.getElementById("current-links").style.display = "block"; 
    document.getElementById("academic-links").style.display = "block"; 
    document.getElementById("facstaff-links").style.display = "block"; 
    document.getElementById("parent-links").style.display = "block"; 
    document.getElementById("alumni-links").style.display = "block"; 
    document.getElementById("visitor-links").style.display = "block"; 
$("#accordion").accordion('destroy'); 
    $("#buttonbar").unbind('mouseenter'); 
    $("#buttonbar").unbind('mouseleave'); 
$.fn.pause=function(a){$(this).stop().animate({dummy:1},a);return this}; 
function mouseleft(){$("#buttonbar").triggerHandler("mouseleave")} 
$(document).ready(function() 
    {$("#buttonbar").mouseenter(function(){$(this).stop().pause(160).animate({height:"12.7em"},400,"easeOutQuart")}).mouseleave(function(){$(this).stop().pause(160).animate({height:"2.2em"},400,"easeOutQuart")});});$(function(){$("#accordion").accordion({fillSpace:!0,icons:{header:"accordion-header",headerSelected:"accordion-headerselected"}})}); 
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) { 
    $("#buttonbar li").bind('touchstart', function(){ 
     console.log("touch started"); 
    }); 
$("#buttonbar li").bind('touchend', function(){ 
     console.log("touch ended"); 
    }); 
} 

    } 
    else { 
    /*$("#accordion").accordion({active:false});*/ 
    $("#accordion").accordion('destroy'); 
    $("#buttonbar").unbind('mouseenter'); 
    $("#buttonbar").unbind('mouseleave'); 
    $("#buttonbar li").unbind('touchstart'); 
    $("#buttonbar li").unbind('touchend'); 

    s.display = "none"; 
    document.getElementById("prospective-links").style.display = "none"; 
    document.getElementById("current-links").style.display = "none"; 
    document.getElementById("academic-links").style.display = "none"; 
    document.getElementById("facstaff-links").style.display = "none"; 
    document.getElementById("parent-links").style.display = "none"; 
    document.getElementById("alumni-links").style.display = "none"; 
    document.getElementById("visitor-links").style.display = "none"; 
    /*$("#buttonbar").accordion('destroy');*/ 

    } 

} 
$(window).resize(showHide); //Run when resized 

jQuery(function($) { 
    var path = location.pathname.substring(1); 
    $('#nav a[href$="' + path + '"]').addClass('active'); 
}); 

// This section makes the skip to anchor links such as the skip to content link work in webkit browsers like Chrome and Safari 
(function(linkList,i,URI) { 
    if (!!(URI = document.documentURI)) { 
     URI = URI.split('#')[0]; 
     document.addEventListener("DOMContentLoaded", function() { 
     document.removeEventListener("DOMContentLoaded", arguments.callee, false); 
     linkList = document.links; 
     for (i in linkList) { 
      if (!!linkList[i].hash) { 
       if (linkList[i].hash.match(/^#./)) { 
        if ((URI+linkList[i].hash)==linkList[i].href){ 
        linkList[i].addEventListener("click", function(e,f,g) { 
         f = document.getElementById(this.hash.slice(1)); 
         if (!(g = f.getAttribute('tabIndex'))) f.setAttribute('tabIndex',-1); 
         f.focus(); 
         if (!g) f.removeAttribute('tabIndex'); 
        }, false); 
        } 
       } 
      } 
     } 
     }, false); 
    } 
    return true; 
})(); 
} 
else { 
function showElement(d){ 
    var s=document.getElementById(d).style; 
    if (s.display != "block") { s.display = "block"; } else { s.display = "none"; } 
}; 


}; 

的HTML如下:

<div id="buttonbar"> 
    <ul id="bar"> 
    <li id="prospective" class="rightborder"><a>Future Students</a> 
    <ul id="prospective-links"> 
     <li><a href="/admissions">Undergraduate Admissions</a></li> 
     <li><a href="/graduate">Graduate Admissions</a></li> 
     <li><a href="/admissions/international">International Admissions</a></li> 
     <li><a href="/transfer">Transfer Admissions</a></li> 
     <li><a href="/advising-center">Academic Advising Center</a></li> 
     <li><a href="/financial_aid">Financial Assistance</a></li> 
     <li><a href="/info/schedules/tuition">Tuition and Fees</a></li> 
     <li><a href="#">Test Item 8</a></li> 
     <li class="last-item"><a href="/prospective">Go to Future Students</a></li> 
    </ul></li> 
     <li id="students" class="rightborder"><a href="/current">Current Students</a> 
     <ul id="current-links"> 
      <li><a href="/info/calendars/academic">Academic Calendar</a></li> 
      <li><a href="/info/schedules">Enrollment Schedule</a></li> 
      <li><a href="/studentservices">Student Life</a></li> 
      <li><a href="/housing">Housing</a></li> 
      <li><a href="/financial_aid/workstudy.html">On-Campus Jobs</a></li> 
      <li><a href="#">Bookstore</a></li> 
      <li><a href="#">Athletics</A></li> 
      <li class="fill"><a name="hold">&nbsp;</a></li> 
      <li class="last-item"><a href="/current">Go to Current Students</a></li> 
     </ul></li> 
    </ul> 
    </div> 
+0

如果你想添加的键盘按钮,它 – ryanc1256

+0

它可能是有益的看看如何你可以看看http://api.jquery.com/keydown/其他键盘可访问的菜单系统可以做到这一点像[superfish](http://users.tpg.com.au/j_birch/plugins/superfish/) – steveax

+0

好吧,我终于找到了一个在线编辑工作的代码。如果有人想测试它,看看你是否可以使用键盘下降菜单,我将不胜感激。 我已经把VIDesignz的解决方案放到了html中,但是我无法让它工作。 http://jsbin.com/udobuc/3/ – user1666190

回答

1

尝试使用tabIndex的链接。 (但steveaz指出他们应该已经可调焦)

$('#buttonbar a').attr('tabIndex', 0); 

对于你不得不以及添加事件作为tabIndex菜单。 $menu是你的菜单(S),我不知道那是什么,调整到自己需要的选择:

$('#bar').attr('tabIndex', 0) 
    .focus(function() { $menu.show(); }) 
    .keydown(function(e) { e.which == 27 && $menu.hide(); }) // ESC 
    .blur(function() { $menu.hide(); }); 
+0

真的不建议用tabindex沾污。 – steveax

+0

@steveax:从SitePoint节省下来:_it不会导致兼容性问题,并且在所有测试过的浏览器中都有出色的支持_ – elclanrs

+0

无论何时您更改默认的标签排序顺序,参见[WCAG 2.0 - 聚焦次序](http://www.w3.org/TR/UNDERSTANDING-WCAG20/navigation-mechanisms-focus-order.html)。菜单中的链接已经可以调整,不需要添加任何内容。 – steveax

0

我会尝试像...给你的按钮栏Tab键索引然后绑定对焦/模糊函数来显示和隐藏的按钮栏菜单

$(document).load(function(){ 

    $('#buttonbar').attr('tabIndex', 0).on({ 
     focus: function(){ 
      $("#buttonbar").triggerHandler("mouseenter"); 
     }, 
     blur: function(){ 
      $("#buttonbar").triggerHandler("mouseleave"); 
     } 
    }); 

}); 
+0

这是第二个问题,我不知道代码需要做什么。我已经试过把我认为是从鼠标的现有代码,但它不起作用(这是上面)。 – user1666190

+0

@ user1666190我根据您发布的脚本编辑了我的答案,我相信这是您需要的工作。 – VIDesignz

+0

我是否将该代码放置在上面的代码底部或什么?我已经在上面的代码和HTML的头部尝试过,但它仍然不能在我的本地副本上工作。今晚我会更新上面链接的例子。 – user1666190