У меня есть таблица HTML, и в каждой строке есть флажок для выбора или отмены выбора этой строки. Всякий раз, когда флажок изменяет значение, мне нужно добавить или удалить выделение в строке, а также убедиться, что кнопка отправки страницы включена только в том случае, если выбрана хотя бы одна строка, и отключена в противном случае.
Обработчик события флажка определяется следующей функцией:
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 плохо обрабатывает взаимодействие с клавиатурой (взаимодействие с мышью работает нормально).
Проблема в том, что, если у флажка есть фокус, и я нажимаю пробел, флажок не проверяется - вместо этого он наполовину проверяется (у него такой же затененный вид, какой он получал бы сразу после размытия). Я должен нажать пробел во второй раз, чтобы на самом деле установить флажок. Аналогично, для снятия отметки требуется два нажатия клавиш. Как ни странно, если я удержу пробел в течение нескольких минут, то одно нажатие будет работать, как и ожидалось.
Может кто-нибудь объяснить, что здесь происходит? Есть ли что-то, что я делаю неправильно в коде JavaScript, который вызывает такое поведение? Как я могу это исправить?