我在rails应用程序上有一个ruby,用户可以使用键盘转到上一个或下一个问题。一次加载一个页面,其中包含指向上一页和下一页的链接。
我想要做的是,如果用户位于第一页,按左键盘箭头键根本不起作用,因为它将是未定义的。此外,如果用户位于最后一页,则按右键盘箭头键也不起作用,因为下一页将是未定义的。现在,如果用户位于第一页或最后一页并分别按下左箭头键或右箭头键,则会在我的应用程序中引发错误,指出无法找到“未定义”的URL。
我的上一个/下一个功能正常运行,但现在对如何继续这个问题感到困惑。
$(function() {
$(document).keyup(function(e) {
switch(e.keyCode) {
case 37 :
var a_href = $(this).find('a.previous_page').attr('href');
window.location=a_href;
break;
case 39 :
//window.location="/page-link-next";
var a_href = $(this).find('a.next_page').attr('href');
window.location=a_href;
break;
}
});
});
答案 0 :(得分:1)
在jQuery集合(例如.length
)上使用.find
来计算集合中有多少元素。
要记住的另一件事是var
被提升;有两个var
在函数内声明相同的变量名称并不完全有效。最好在别处(例如在顶部)声明变量名称并重新分配,或者使用除switch
语句之外的其他内容,这样就可以使用const
,它具有块范围并且更容易处理用:
$(function() {
$(document).keyup(function(e) {
const keyCode = e.keyCode;
if (keyCode === 37) {
const a = $(this).find('a.previous_page');
if (a.length === 0) return;
window.location= a.attr('href');
} else if (keyCode === 39) {
const a = $(this).find('a.next_page');
if (a.length === 0) return;
window.location= a.attr('href');
}
});
});
最好不要使用switch
,如果你可以避免它 - 这是不必要的冗长和容易出错。