【问题标题】:Solve IE7 bug "input type=file" onchange fire twice?解决IE7 bug "input type=file" onchange fire 两次?
【发布时间】:2011-09-14 16:15:31
【问题描述】:

你有没有遇到过这个 IE7 的 bug:

<input type="file" id="xxx">

<script> 
     $('#xxx').change(function(){ alert(1) })
</script>

当我单击输入并选择一个文件时,警报框第一次显示。然后我点击正文的空白区域,警报框再次显示。即使我使用 JQuery 1.6(目前最新)将更改事件绑定到 input:file 也会发生这种情况。

我怎样才能以最简单的方式防止这种情况发生?感谢所有建议!

【问题讨论】:

  • 我认为在 IE7 中,第一个事件是文件更改,第二个事件是在字段失去焦点(onblur)时发生。
  • 我不想建议一个变量来限制代码只执行一次。

标签: jquery events input internet-explorer-7 onchange


【解决方案1】:

这是我经过几个小时的“头脑风暴”后所做的:

$('input:file').click(
    function(){
         $(this).one(
              'change',
              function(){ alert(1) /*do stuff here*/ }
         )
    }
)

每次用户单击输入以选择文件时,我们都会将事件“change”与它绑定一次。因此,每次用户想要选择文件时,该事件都会触发一次。

感谢上帝,它有效!谢谢大家。

【讨论】:

  • 非常感谢!希望我能投票数十次。解决了我的问题。
【解决方案2】:

你的函数运行后我会简单地取消绑定触发器

【讨论】:

  • 并在第一次运行后在页面访问期间终止该功能? ;)
  • 你是对的,可以将事件放在 .blur() 触发器上进行测试,以查看它是否被调用两次,IE 可能会向 .change( ) 其中 .blur() 是当你失去焦点时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 2018-07-03
相关资源
最近更新 更多