我有一个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不能很好地处理键盘交互(鼠标交互工作正常)。
问题是如果一个复选框有焦点并且我点击了空格键,则复选框不会被检查 - 而是它被检查了一半(它具有与在mousedown之后立即获得的相同的阴影外观)。我必须第二次按空格键才能实际检查该框。同样,它需要两次按键才能取消选中它。奇怪的是,如果我按住空格键一会儿,那么一次按下就会按预期工作。
任何人都可以解释这里发生了什么吗?在JavaScript代码中是否存在导致此行为的错误?我该如何解决这个问题?
答案 0 :(得分:1)
不幸的是,IE处理onchange与其他浏览器不同。 IE将其解释为“改变后的模糊”。请注意,虽然这不是很有用,但根据规范在技术上是正确的:“当控件失去输入焦点并且自获得焦点后其值已被修改时,会发生onchange事件”
您可以尝试使用仅限IE的事件“onpropertychange”。
参考:http://lhorie.blogspot.com/2007/04/fixing-ie7-onchange-bug-on-checkboxes.html