2009-05-29 3 views
0

У меня есть таблица 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-коде, вызывающем такое поведение? Как я могу это исправить?

ответ

1

К сожалению, IE обрабатывает поменять иначе, чем другие браузеры. IE интерпретирует это как «размытие после изменения». Обратите внимание, что, хотя это не очень полезно, это технически корректно в соответствии со спецификацией: «Событие onchange происходит, когда элемент управления теряет фокус ввода и его значение было изменено с момента получения фокуса»

Вы можете попробовать использовать Событие только для IE «onpropertychange».

Ссылка: http://lhorie.blogspot.com/2007/04/fixing-ie7-onchange-bug-on-checkboxes.html

+0

Но как это объяснить тот факт, что ПРОБЕЛ пресса не вызывает этот флажок, чтобы проверить? –

+0

Я не могу объяснить это поведение. Возможно, вы захотите попробовать добавить событие keydown в этот флажок и изучить поведение с помощью отладчика или использовать событие keydown для проверки нажатия пробела (event.keyCode === 32). – BarelyFitz

Смежные вопросы