IE问题:键盘与复选框的交互

时间:2009-05-29 13:27:30

标签: javascript internet-explorer dom cross-browser

我有一个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代码中是否存在导致此行为的错误?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

不幸的是,IE处理onchange与其他浏览器不同。 IE将其解释为“改变后的模糊”。请注意,虽然这不是很有用,但根据规范在技术上是正确的:“当控件失去输入焦点并且自获得焦点后其值已被修改时,会发生onchange事件”

您可以尝试使用仅限IE的事件“onpropertychange”。

参考:http://lhorie.blogspot.com/2007/04/fixing-ie7-onchange-bug-on-checkboxes.html