我正在尝试将 jQuery UI 1.9 微调器用于购物车应用程序中的数量字段,并且遇到了影响 IE6 - 9(可能是 10)但不影响 Firefox 或 Chrome 的问题。
问题是,当微调器仅旋转一次时,我在微调器定义的更改事件中的代码不会在 IE 中触发,而无需首先将焦点应用于输入字段本身,即只需单击上/下旋转按钮在未选择的微调器上,然后单击微调器,不会触发任何更改事件。
编辑 - 我为此创建了一个jsfiddle来帮助说明问题。问题出现在IE6-9,10我没试过。
在 IE 中确保焦点不在微调器输入字段上,只需单击微调器添加箭头一次,然后单击页面上的其他位置。不显示警报。有趣的是,如果您首先将焦点放在输入字段中,即单击输入字段,然后单击微调器箭头,然后单击离开,则不会出现此问题。
jsfiddle 确实显示更改事件未触发,但由于它从 jQuery Github 页面运行源代码,因此无法在 IE 中微调器的内部工作中显示额外的焦点事件触发。
为了确保这不是我做过的任何事情,我复制了当前 1.9m7 里程碑版本中的所有演示文件并进行了复制。为了确认问题,我添加了一些控制台日志消息以查看发生了什么。
在 IE9 中,一个额外的焦点事件在 _events 焦点中触发(在 jquery.ui.spinner.js 中)。
这有更新 this.previous 两次的效果,所以第一次是正确的(和其他浏览器一样),但是第二次焦点导致 this.previous 被设置为与当前值相同的值,所以当模糊事件触发并检查 this.previous !== this.element.val() 它们是否相同并且更改不会触发。
如果您旋转不止一次,则不会出现此问题,因为不会触发额外的焦点,因此先前的值保持正确。谁能帮我确定在哪里触发了额外的焦点,或者是否有解决方法?
我需要为工作中的项目解决这个问题,并且真的不想在这个阶段移除微调器。鉴于 jQuery 的跨浏览器兼容性目标,我很难相信存在这样一个基本问题会影响一个已经存在了几年的小部件的跨浏览器兼容性(当然,还不是当前版本的一部分)。以前怎么没人注意到?