IE7更改事件未被触发

时间:2011-10-05 16:45:55

标签: jquery internet-explorer-7

我做错了吗?为什么 click 事件不会在第一个keydown上注册?

http://jsfiddle.net/vol7ron/VJ5CX/

在示例中,

  1. 点击“菜单”以确保其具有焦点
  2. 使用箭头键(向上/向下)突出显示选项
  3. 使用空格键选择选项
  4. 注意没有调用change()事件。再次使用空格键选择相同的选项,并注意它正常工作。


    我试过了:

    • 根据this question使用模糊/焦点,但没有运气
    • 将checked属性设置为false,以确保触发更改事件

    有趣的发现:

    • 使用鼠标时没有问题(第一次触发更改事件,正如预期的那样)
    • 即使在使用鼠标选择(运行,单击选项,将鼠标悬停在该选项并使用键盘)后,仍会出现keydown问题。

    预期结果:

    • 使用键盘导航(向上/向下箭头)并使用空格键选择,应触发“keydown”和“click”日志。它不适用于初始keydown,但每次都会执行。 (查看Firefox以获取工作示例)

2 个答案:

答案 0 :(得分:1)

我在初始加载时使用模糊/焦点。显然我需要在keydown事件中模糊/聚焦:

if (e.keyCode == 13 || e.keyCode == 32) {
   var cb = container.find('label.x-hover input:checkbox');

   cb.blur();             // <-- added
   cb.focus();            // <-- added
   cb.click();  
   updateLog('keydown');
   oTitle.focus();      
   return false;
}

答案 1 :(得分:0)

尝试这样做。它也发生在我身上。但我试过这个,它有所帮助。我不确定这是否有效。

container
.find('input[type="checkbox"]')
.change(function(){
   var cb     = $(this);
   var sClass = "checked";

   if (cb.prop(sClass)) { 
       cb.parent('label').addClass(sClass); 
   } else { 
       cb.parent('label').removeClass(sClass); 
   }
   updateLog('click');        
   oTitle.focus();
})