J'essaye d'écrire la navigation de table en utilisant des clefs pour le gridview d'asp.net. C'est ce que j'ai jusqu'ici. Cela fonctionne bien mais c'est lent. S'il vous plaît regardez-le et laissez-moi savoir comment améliorer la performance si possible.amélioration des performances de navigation de table dans jquery
Fondamentalement, il s'agit d'une table html avec des éléments d'entrée. La structure de la table est comme ce
<table>
<tr>
<td>
<div style="height:22px;">
<input type = "text">
</div>
</td>
</tr>
<tr>
<td>
<div style="height:22px;">
<input type = "text">
</div>
</td>
</tr>
...
</table>
jQuery(function($) {
$('table#<%= myTable.ClientID %>')
.bind('keydown', funcKeyDown)
});
function funcKeyDown(event)
{
//get cell element.
var cell = event.target;
//get current cellIndex
var $cell = $(cell);
var currCell = $cell.parents("td");
var cellIndex = currCell[0].cellIndex;
//get current rowIndex
var currRow = $cell.parents("tr");
var rowIndex = currRow[0].rowIndex;
var nextRowIndex, targetElem = null;
var nextCell;
switch(event.keyCode) {
case 13: //enter key
if(shiftKeyPressed == 1){
//move left
if(!(cellIndex == 0)){
targetElem = currRow.children("td").eq(cellIndex-1).find("input[type=text]");
if(targetElem){targetElem.select();}}}
else {
//move right
if(!(cellIndex == (numElements -1))){
targetElem = currRow.children("td").eq(cellIndex+1).find("input[type=text]");
if(targetElem){
targetElem.select();
}
}
}
return false;
case 16: //shift key
shiftKeyPressed = 1;
return false;
case 33:
case 34: //page-up, page-down
if(event.keyCode == 33){
nextRowIndex = rowIndex - pageSize;
if(nextRowIndex < 0) nextRowIndex = 0;
}
if(event.keyCode == 34){
nextRowIndex = rowIndex + pageSize;
if(nextRowIndex > numRows) nextRowIndex = numRows;
}
targetElem = currRow.parent().children("tr").eq(nextRowIndex).children("td").eq(cellIndex)
.find("input[type=text]");
if(targetElem != null){targetElem.select();}
return false;
case 37: //left
if(!(cellIndex == 0)){
targetElem = currRow.children("td").eq(cellIndex-1).find("input[type=text]");
if(targetElem != null){targetElem.select();}}
return false;
case 38: //up
if(rowIndex != 0){
targetElem = currRow.parent().children("tr").eq(rowIndex-1).children("td").eq(cellIndex)
.find("input[type=text]");
if(targetElem != null){
targetElem.select();}}
return false;
case 39: //right arrow
if(!(cellIndex == (numElements -1))){
targetElem = currRow.children("td").eq(cellIndex+1).find("input[type=text]");
if(targetElem != null){targetElem.select();}}
return false;
case 40: //down
if(rowIndex >= 0){
targetElem = currRow.parent().children("tr").eq(rowIndex+1).children("td").eq(cellIndex)
.find("input[type=text]");
if(targetElem != null){targetElem.select();}}
return false;
}
}