jQuery 1.4.2中存在一个错误,当使用DOM事件和jQuery事件时,select-element上的change事件会被触发两次,这只在IE7 / 8上发生.
这是测试代码:
<html> <head> <script src="http://code.jquery.com/jquery-1.4.2.js" type="text/javascript"></script> <script type="text/javascript"> jQuery(document).ready(function() { jQuery(".myDropDown").change(function() { }); }); </script> </head> <body> <select class="myDropDown" onchange="alert('hello');"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> </select> </body> </html>
更新:
问题的另一种观点,实际上这是我们的应用程序的真正问题.在没有用DOM事件触及select元素的选择器上绑定实时更改事件也会导致双击.
<html> <head> <script src="http://code.jquery.com/jquery-1.4.2.js" type="text/javascript"></script> <script type="text/javascript"> jQuery(document).ready(function() { jQuery(".someSelectThatDoesNotExist").live("change",function() { }); }); </script> </head> <body> <select class="myDropDown" onchange="alert('hello');"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> </select> </body> </html>
实际错误的票:http://dev.jquery.com/ticket/6593
这在我们的应用程序中给我们带来了很多麻烦,因为我们使用混合了jQuery的ASP.NET事件,并且一旦你在任何元素上挂起一个change事件,每个select(下拉列表)都会遇到这个双重触发问题.
在这个问题得到解决之前,有没有人知道解决这个问题的方法?
解决方法
我讨厌从死里复活这个问题,但是jquery最终修复了最近发布的1.7版本中的这个错误.