Я хотел бы принять ответ Уильяма Ниу, но есть недостаток, который не позволяет ему работать в моем веб-приложении.Если первый или последний элемент в диалоге является переключателем, то этот код не будет работать в IE.Браузер будет переходить на группу переключателей один раз.
Если выбранный переключатель является тем, который выделен браузером при переходе пользователя в группу переключателей, этот код будет работать.Однако выбранный переключатель не тот, который браузер выделяет при переходе пользователя в группу переключателей, тогда в диалоговом окне фокус будет потерян.
Вот код, который я написал для решения этой проблемы.задача:
function _bindTabKeyForDialog(dialogId) {
var tabbable = $('#' + dialogId).find(':tabbable');
var firstElement = $(tabbable).filter(':first');
var lastElement = $(tabbable).filter(':last');
var firstGroup = (firstElement[0].type !== 'radio') ?
firstElement :
tabbable.filter("[name='" + firstElement[0].name + "']");
var lastGroup = (lastElement[0].type !== 'radio') ?
lastElement :
tabbable.filter("[name='" + lastElement[0].name + "']");
$(document).unbind('keydown.' + dialogId);
$(document).bind('keydown.' + dialogId, function (e) {
if (e.keyCode == 9) {
if ($(e.target).is(lastGroup) && !e.shiftKey) {
firstGroup.first().focus();
e.preventDefault();
}
else if ($(e.target).is(firstGroup) && e.shiftKey) {
lastGroup.first().focus();
e.preventDefault();
}
}
});
} // end _bindTabKeyForDialog
Как видите, я меняю переменные first
и last
Уильяма на группы элементов.Если первый или последний элемент с вкладками в диалоговом окне является переключателем, то он будет включать все переключатели с одинаковым именем.
В противном случае этот код работает так же, как код Уильяма.