我正在我的网站上使用此键盘导航。
我正在尝试选择其他HTML文件。
我想要的实际上是在选择item1.html
的情况下单击 ENTER 时,它会加载Item 1
。在选择item2.html
的情况下单击 ENTER 时,它将加载Item 2
。如何使用JavaScript。
任何帮助或指向说明的链接都将非常有用。谢谢!
我使用的代码与此相同:
(function($, document) {
'use strict';
var items = $('#list').children();
function selectItem(item) {
item.addClass('selected')
.attr('aria-selected', 'true')
.siblings()
.removeClass('selected')
.attr('aria-selected', 'false');
}
$(document).keyup(function(event) {
var key = event.which,
direction = null,
position = null,
item = null;
switch (key) {
case 35: // End
position = 'last';
break;
case 36: // Home
position = 'first';
break;
case 38: // Key up
direction = 'prev';
break;
case 40: // Key down
direction = 'next';
break;
}
if (position) {
item = items[position]();
} else if (direction) {
item = items.filter('.selected')[direction]();
}
if (item) {
selectItem(item);
}
});
$('#list a').click(function() {
selectItem($(this).closest('li'));
return false;
});
selectItem(items.first());
})(jQuery, document);
body {
width: 30em;
margin: 2em auto;
font: 81.25%/1.5 Lato, sans-serif;
text-align: center;
color: #444;
background-color: #fff;
}
kbd {
padding: 2px 3px;
background-color: #f4f4f4;
border: 1px solid #ccc;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
}
#list {
width: 12em;
margin: 0 auto;
padding: 0;
list-style: none;
}
#list a {
display: block;
width: 100%;
line-height: 3;
text-decoration: none;
color: #fff;
background-color: #393;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
#list li {
margin-bottom: 5px;
}
#list li.selected a {
background-color: #c22;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<main role="main">
<ul id="list">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li><a href="#">Item 3</a></li>
<li><a href="#">Item 4</a></li>
<li><a href="#">Item 5</a></li>
</ul>
<p>Click on this demo to give it focus.</p>
<p>Click to select an item or use <kbd>key up</kbd>, <kbd>key down</kbd>, <kbd>home</kbd>, or <kbd>end</kbd>.</p>
</main>
答案 0 :(得分:0)
我已根据您的要求编写了几行代码
// find elements
$(document).keypress(function(event){
var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == '13'){
var selectedPage=$("#nav-form input:checked").val();
if(selectedPage === 'facebook'){
location.href = "https://www.facebook.com";
}else if(selectedPage === 'twitter'){
location.href = "https://www.twitter.com";
}else{
location.href = "https://www.instagram.com";
}
}
});
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#banner {
background: #fff;
border-radius: 4px;
padding: 20px;
font-size: 16px;
text-align: center;
transition: all 0.2s;
margin: 0 auto;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="banner">
<form id="nav-form">
<label class="radio-inline">
<input type="radio" name="optradio" checked value="facebook">Facebbok
</label>
<label class="radio-inline">
<input type="radio" name="optradio" value="twitter">Twitter
</label>
<label class="radio-inline">
<input type="radio" name="optradio" value="instagram">Instagram
</label>
</form>
</div>
答案 1 :(得分:0)
这很简单。
只需将事件监听器添加到文档中,例如:
document.addEventListener('keydown',(ev)=>{
if(ev.keyCode === 13) {
switch(ev.target.id) {
case 'item2':
window.open('./item2.html')
}
}
});
在上面的代码中,为文档上的每个keydown事件触发事件侦听器,但是我们仅针对ENTER press事件过滤它,并且当ENTER事件发生在具有指定ID的元素上时,我们将打开一个新的页面。
希望这会有所帮助。
我做过一个做同样的事情。您可以在这里Demo
进行检查答案 2 :(得分:0)
我已经使用一种新方法更新了您的代码,如果case 13:
,该方法将运行。
现在,您已经在loadHTML()
方法中选择了元素,并且可以使用该选择的项目/元素来加载任何页面。
(function($, document) {
'use strict';
var items = $('#list').children();
function loadHTML() {
var itemText = $("#list li.selected").text();
console.log(itemText);
}
function selectItem(item) {
item.addClass('selected')
.attr('aria-selected', 'true')
.siblings()
.removeClass('selected')
.attr('aria-selected', 'false');
}
$(document).keyup(function(event) {
var key = event.which,
direction = null,
position = null,
item = null;
switch (key) {
case 35: // End
position = 'last';
break;
case 36: // Home
position = 'first';
break;
case 38: // Key up
direction = 'prev';
break;
case 40: // Key down
direction = 'next';
break;
case 13:
direction = 'none';
loadHTML();
break;
}
if (position) {
item = items[position]();
} else if (direction) {
if (direction != 'none') {
item = items.filter('.selected')[direction]();
}
}
if (item) {
selectItem(item);
}
});
$('#list a').click(function() {
selectItem($(this).closest('li'));
return false;
});
selectItem(items.first());
})(jQuery, document);
body {
width: 30em;
margin: 2em auto;
font: 81.25%/1.5 Lato, sans-serif;
text-align: center;
color: #444;
background-color: #fff;
}
kbd {
padding: 2px 3px;
background-color: #f4f4f4;
border: 1px solid #ccc;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
}
#list {
width: 12em;
margin: 0 auto;
padding: 0;
list-style: none;
}
#list a {
display: block;
width: 100%;
line-height: 3;
text-decoration: none;
color: #fff;
background-color: #393;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
#list li {
margin-bottom: 5px;
}
#list li.selected a {
background-color: #c22;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<main role="main">
<ul id="list">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li><a href="#">Item 3</a></li>
<li><a href="#">Item 4</a></li>
<li><a href="#">Item 5</a></li>
</ul>
<p>Click on this demo to give it focus.</p>
<p>Click to select an item or use <kbd>key up</kbd>, <kbd>key down</kbd>, <kbd>home</kbd>, or <kbd>end</kbd>.</p>
</main>