我创造小提琴:
http://jsfiddle.net/marko4286/7TmJc/
function arrowUp() {
var activeTableRow = $('.table tbody tr.active').removeClass('active').first();
if (activeTableRow.length) {
activeTableRow.prev().addClass('active');
} else {
$('.table tbody').children().last().addClass('active');
}
};
function arrowDown() {
var activeTableRow = $('.table tbody tr.active').removeClass('active').first();
if (activeTableRow.length) {
activeTableRow.next().addClass('active');
} else {
$('.table tbody').children().first().addClass('active');
}
};
$(window).keydown(function (key) {
if (key.keyCode == 38) {
arrowUp();
}
if (key.keyCode == 40) {
arrowDown();
}
});
问题是当我使用向上/向下箭头键时,以及当我有垂直滚动时。当它结束时自动返回第一行。
当我在第一行时,我想停止选择,当我在最后一行时选择行。
另外,问题是我有一个垂直滚动,通过箭头选择行是应该告别,因为它会自动滚动div(当table或div有垂直滚动时,它应该如何工作选择行的示例{ {3}} /)
答案 0 :(得分:2)
我提供的第一个功能真的很简洁。基本上,两种方法之间的唯一区别是next或prev是否被调用,因此函数接受此值作为参数并且适用于两个方向。
就基本功能而言,它基本上会尝试选择下一个或上一个tr
。如果该元素不存在,则不执行任何操作。如果它确实存在,它只是切换类。
Javascript方法0
function arrow(dir) {
var activeTableRow = $('.table tbody tr.active')[dir](".table tbody tr");
if (activeTableRow.length) {
$('.table tbody tr.active').removeClass("active");
activeTableRow.addClass('active');
}
};
$(window).keydown(function (key) {
if (key.keyCode == 38) {
arrow("prev");
}
if (key.keyCode == 40) {
arrow("next");
}
});
工作示例: http://jsfiddle.net/7TmJc/4/
Javascript方法1
function arrowUp() {
var activeTableRow = $('.table tbody tr.active').prev(".table tbody tr");
if (activeTableRow.length) {
$('.table tbody tr.active').removeClass("active");
activeTableRow.addClass('active');
}
};
function arrowDown() {
var activeTableRow = $('.table tbody tr.active').next(".table tbody tr");
if (activeTableRow.length) {
$('.table tbody tr.active').removeClass("active");
activeTableRow.addClass('active');
}
};
$(window).keydown(function (key) {
if (key.keyCode == 38) {
arrowUp();
}
if (key.keyCode == 40) {
arrowDown();
}
});
答案 1 :(得分:1)
使用以下代码:
function arrowUp() {
if(!$(".table tbody tr").first().hasClass('active')){
var activeTableRow = $('.table tbody tr.active').removeClass('active').first();
if (activeTableRow.length) {
activeTableRow.prev().addClass('active');
} else {
$('.table tbody').children().last().addClass('active');
}
}
};
function arrowDown() {
if(!$(".table tbody tr").last().hasClass('active')){
var activeTableRow = $('.table tbody tr.active').removeClass('active').first();
if (activeTableRow.length) {
activeTableRow.next().addClass('active');
} else {
$('.table tbody').children().first().addClass('active');
}
}
};
这是有效的。