Рассмотрим следующий пример кода.
$(function() {
function getTable() {
$.ajax({
cache: false,
url: "/test/test/test.php",
data: "url=table",
success: function(response) {
$("body").html(response);
}
});
}
function returnHome() {
$.ajax({
cache: false,
url: "/test/test/test.php",
success: function(response) {
$("body").html(response);
}
});
}
function prev() {
if ($('.selected').index() == 0) {
return;
}
$('.selected')
.removeClass('selected')
.prev()
.addClass('selected');
}
function next() {
var c = $("td.selected").siblings().length;
if ($('.selected').index() >= c) {
return;
}
$('.selected')
.removeClass('selected')
.next()
.addClass('selected');
}
function move(e) {
if ($(e.target).hasClass("next")) {
next();
} else {
prev();
}
}
$(".to_table").on('click', getTable);
$(".to_home").on('click', returnHome);
$(".move").on('click', move);
$(document).keydown(function(key) {
if (key.which == 39) {
next();
}
if (key.which == 37) {
prev();
}
});
});
.selected {
background-color: red;
}
.button {
padding: .2em .4em;
background: #ccc;
border-radius: 3px;
display: inline;
cursor: pointer;
}
<script src="http://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<div class="to_home button">go to home</div>
<div>
<table style="border: 1px solid black; margin: 5px;">
<tbody>
<tr>
<td class="selected" style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
</tr>
</tbody>
</table>
</div>
<div class="move prev button"><</div>
<div class="move next button">></div>
Возможно, лучше настроить функции, поскольку мы можем затем вызывать их из разных частей пользовательского интерфейса.Похоже, вы хотите, чтобы нажатие кнопки или нажатие клавиши приводило «курсор» в ту или иную сторону.Я добавил prev
в ожидании потенциальной потребности.
Функция Move просто помогает нам легче назначать обратный вызов события.Использование .on()
позволяет привязывать функции обратного вызова к событиям на элементах, которые в данный момент недоступны.Поскольку они будут созданы из вызовов Ajax, это лучший способ управления им.
Теперь событие click и событие нажатия клавиши вызывают те же функции, которые перемещают курсор.Я также добавил ограничитель, чтобы курсор не перемещался за край.Это использует .index()
, чтобы получить индекс текущей ячейки в таблице между 0
и числом братьев и сестер, в этом примере 8
.
Надеюсь, это поможет!
$(function() {
function getTable() {
$.ajax({
cache: false,
url: "/test/test/test.php",
data: "url=table",
success: function(response) {
$("body").html(response);
}
});
}
function returnHome() {
$.ajax({
cache: false,
url: "/test/test/test.php",
success: function(response) {
$("body").html(response);
}
});
}
function prev() {
if ($('.selected').index() == 0) {
return;
}
$('.selected')
.removeClass('selected')
.prev()
.addClass('selected');
}
function next() {
var c = $("td.selected").siblings().length;
if ($('.selected').index() >= c) {
return;
}
$('.selected')
.removeClass('selected')
.next()
.addClass('selected');
}
function up() {
var row = $(".selected").parent();
var cInd = $(".selected").index();
if (row.index() == 0) {
return;
}
$(".selected").removeClass("selected");
row
.prev()
.find("td").eq(cInd)
.addClass("selected");
}
function down() {
var row = $(".selected").parent();
var cInd = $(".selected").index();
if (row.index() >= row.siblings().length) {
return;
}
$(".selected").removeClass("selected");
row
.next()
.find("td").eq(cInd)
.addClass("selected");
}
function wrap(d) {}
function move(e) {
var cls = $(e.target).attr("class").split(" ").join("");
cls = cls.replace("move", "");
cls = cls.replace("button", "");
switch (cls) {
case "next":
next();
break;
case "prev":
prev();
break;
case "up":
up();
break;
case "down":
down();
break;
}
}
$(".to_table").on('click', getTable);
$(".to_home").on('click', returnHome);
$(".move").on('click', move);
$(document).keydown(function(key) {
if (key.which == 39) {
next();
}
if (key.which == 37) {
prev();
}
if (key.which == 38) {
up();
}
if (key.which == 40) {
down();
}
});
});
.selected {
background-color: red;
}
.button {
padding: .2em .4em;
background: #ccc;
border-radius: 3px;
display: inline;
cursor: pointer;
}
<script src="http://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<div class="to_home button">go to home</div>
<div>
<table style="border: 1px solid black; margin: 5px;">
<tbody>
<tr>
<td class="selected" style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
</tr>
<tr>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
</tr>
<tr>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
<td style="border: 1px solid black;">r</td>
</tr>
</tbody>
</table>
</div>
<div class="move up button">/\</div>
<div class="move prev button"><</div>
<div class="move next button">></div>
<div class="move down button">\/</div>