Wyświetlam wyniki wyszukiwania z tabelą. Każdy wynik ma przycisk do kliknięcia przez użytkownika, aby pokazać pełny jego szczegół. To działa dobrze.Jak powiązać klawisze strzałek w górę iw dół, aby włączyć nawigację w wierszach tabeli?
Chcę również umożliwić nawigację w wynikach wyszukiwania za pomocą klawiszy strzałek w górę i w dół.
Teraz użytkownik musi kliknąć przycisk lub kartę Select
na przycisk i nacisnąć space bar
.
Przypuszczam, że mogę przechwycić zdarzenie keyup i down, a następnie znaleźć poprzednie lub następne, które muszę wybrać, a następnie ustawić, ale brzmi to jak dużo pracy. Zastanawiam się, czy jest lepszy sposób na zrobienie tego?
javascript
var myModel = new function() {
var self = this;
self.selectedResult = ko.observable(new MyObj());
self.searchResults = ko.observableArray();
self.navUpDown = function (item, evt) {
if (evt.keyCode == 38) { // up
var id = item.ID();
// find previous one and set selectedResult
}
if (evt.keyCode == 40) { // down
var id = item.ID();
// find next one and set selectedResult
}
};
};
html
<table class="table">
<thead>
<tr>
<th> </th>
<th>table header 1</th>
<th>table header 2</th>
</tr>
</thead>
<tbody data-bind="foreach: searchResults">
<tr data-bind="css: { 'btn-info': $parent.selectedResult() == $data }, event: { keyup: $parent.navUpDown } ">
<td>
<button class="btn btn-small" data-bind="click: $parent.selectResult">Select</button>
</td>
<td data-bind="text: data1"></td>
<td data-bind="text: data2"></td>
</tr>
</tbody>
</table>
Znajdowanie poprzedniego i następnego nie powinno być wcale trudne. coś takiego jak $ (this) .nextSibling() i $ (this) .prevSibling() powinny zrobić to, czego potrzebujesz. – Johan