jqGrid-перемещение строк с помощью клавиш со стрелками вверх/вниз?
можно ли перемещаться между строками с помощью клавиш со стрелками вверх и вниз?
например, если выбрана первая строка в сетке и пользователь нажимает "вниз", я хотел бы, чтобы сетка сняла эту строку и выбрала следующую строку в сетке.
на форумах jqGrid есть сообщение об этом на http://www.trirand.com/blog/?page_id=393/help/navigate-arraw-keys/, но включение режима редактирования ячейки не является решением для меня, поскольку это вызовет много другие нежелательные поведения сетки.
4 ответов
клавиатура навигация, наконец, была добавлена в jqGrid с версии 4.0.
чтобы начать работу, перейдите в Демо-Страницы и выберите Functionality
| Keyboard navigation
.
для привязки клавиш со стрелками вверх/вниз используется следующий код:
jQuery("#keynav").jqGrid('bindKeys');
но, как показывает демо, вы можете передать опции для привязки других ключей:
// Bind the navigation and set the onEnter event
jQuery("#keynav").jqGrid('bindKeys', {
"onEnter" : function( rowid ) {
alert("You enter a row with id:"+rowid)
}
});
для получения дополнительной информации, пожалуйста, обратитесь к метод bindKeys в документации вики.
$(document).keypress(function(e) {
if(e.keyCode == 40) { //down arrow
$('#nextElementId').click();
}
if(e.keyCode == 38 { //up arrow
$('#previousElementId'.click();
}
});
Это будет работать только если у вас одна сетка на экране, потому что он переопределяет уровень документ вверх/вниз, но это начало.
$(document).keypress(function(e)
{
if(e.keyCode == 38 || e.keyCode == 40) //up/down arrow override
{
var gridArr = $('#GridID').getDataIDs();
var selrow = $('#GridID').getGridParam("selrow");
var curr_index = 0;
for(var i = 0; i < gridArr.length; i++)
{
if(gridArr[i]==selrow)
curr_index = i;
}
if(e.keyCode == 38) //up
{
if((curr_index-1)>=0)
$('#GridID').resetSelection().setSelection(gridArr[curr_index-1],true);
}
if(e.keyCode == 40) //down
{
if((curr_index+1)<gridArr.length)
$('#GridID').resetSelection().setSelection(gridArr[curr_index+1],true);
}
}
});
для этого использовать
jQuery("#myGrid").jqGrid('bindKeys');
однако, это не будет работать, если сетка имеет .disableSelection()
прилагается к нему. jQuery отключить выделение останавливает выделение текстового содержимого в объекте, поэтому, если это применяется к сетке, пользователь не может выбрать текст в сетке и скопировать его в буфер обмена.