У меня есть таблица HTML, и каждая строка имеет флажок для выбора или отмены выбора ее строки. Всякий раз, когда флажок меняет значение, мне нужно добавить или удалить подсветку строки, а также убедиться, что кнопка отправки страницы включена, только если выбрана и отключена хотя бы одна строка.Проблема IE: взаимодействие клавиатуры с флажком
обработчик событий Флажка определяется следующая функция:
function getCheckboxCallback() {
return function() {
var parentRow = getParentRow(this);
if (!parentRow) {
return; // No parent row found; abort
}
// Adjust the appearance of the row
setSelected(parentRow, this.checked);
// Count the number of selected table rows, and disable the submit
// button whenever no rows are selected
enforceInvariants();
return true;
};
}
В другом месте в том же модуле, флажки приводятся обработчики событий:
checkbox.onchange = getCheckboxCallback();
checkbox.onclick = getCheckboxCallback(); // alleged IE fix
я работаю в Windows XP , и все отлично работает как в Firefox 3, так и в Opera 9. Однако IE 7 не отлично работает с клавиатурным взаимодействием (взаимодействие с мышью прекрасное).
Проблема заключается в том, что если флажок имеет фокус, и я нахожусь в пробеле, флажок не проверяется - вместо этого он получает половину проверки (он имеет тот же затененный вид, что и сразу после mousedown) , Я должен нажать пробел второй раз, чтобы на самом деле проверить флажок. Аналогично, для снятия отметки требуется два нажатия клавиш. Как ни странно, если я удерживаю пробел на несколько мгновений, то один пресс работает так, как ожидалось.
Может ли кто-нибудь объяснить, что здесь происходит? Есть ли что-то, что я делаю неправильно в JavaScript-коде, вызывающем такое поведение? Как я могу это исправить?
Но как это объяснить тот факт, что ПРОБЕЛ пресса не вызывает этот флажок, чтобы проверить? –
Я не могу объяснить это поведение. Возможно, вы захотите попробовать добавить событие keydown в этот флажок и изучить поведение с помощью отладчика или использовать событие keydown для проверки нажатия пробела (event.keyCode === 32). – BarelyFitz