jQuery UI 1.9 Spinner,如果只旋转一次,则不会发生Change事件

时间:2012-05-08 09:22:00

标签: jquery jquery-ui internet-explorer spinner

我正在尝试将jQuery UI 1.9微调器用于购物车应用程序中的数量字段,并且遇到影响IE6-9(可能是10)的问题,但不是Firefox或Chrome。

问题是我在微调器定义的change事件中的代码在微调器只旋转一次时没有在IE中触发,没有焦点首先应用于输入字段本身,即只需点击向上/在未选择的微调器上按下旋转按钮,然后单击微调器,不会触发任何更改事件。


编辑 - 我为此创建了jsfiddle来帮助说明问题。问题出现在IE6 - 9中,我没有在10中尝试过。

在IE中确保焦点不在微调器输入字段上,只需单击微调器添加箭头一次,然后单击页面上的其他位置。没有显示警报。有趣的是,如果您首先将焦点放入输入字段,即单击输入字段,然后单击旋转箭头,然后单击,则不会出现此问题。

jsfiddle确实显示更改事件没有触发,但是当它从jQuery Github页面运行源时,无法在IE中的微调器内部工作中显示额外的焦点事件。


为了确保它不是我做过的任何事情,我在current 1.9m7 milestone release中获取了所有演示文件的副本并随之重现。为了确认问题,我添加了一些控制台日志消息,以查看发生了什么。

在IE9中,一个额外的焦点事件在_events焦点中触发(在jquery.ui.spinner.js中)。

这具有更新this.previous两次的效果,所以第一次正确(如在其他浏览器中),但第二次焦点导致this.previous被设置为与当前值相同的值,所以当模糊事件触发并检查this.previous!== this.element.val()时,它们是相同的,并且更改不会触发。

如果您多次旋转,则不会发生此问题,因为额外的焦点不会触发,因此之前的值仍然正确。任何人都可以帮我确定触发额外焦点的位置,或者是否有解决方法?

我需要为工作中的项目解决这个问题,并且真的不想在这个阶段删除微调器。鉴于jQuery的跨浏览器兼容性的目标,我发现很难相信存在这样一个根本问题,影响到几年来一直存在(被授予,但尚未成为当前版本的一部分)的小部件的跨浏览器兼容性。之前没人注意到什么?

1 个答案:

答案 0 :(得分:2)

我向jQuery团队提交了一份错误报告,并立即修复了。因此,这个问题不再是一个问题。