如果您还没有听说,jQuery Conference 2011 将于本周晚些时候在波士顿举行。我们准备了一些我们喜欢称之为 jQuery 1.7 Beta 1 的东西,我们将在会议上对此进行大量讨论。它包含了一堆新的功能和重要的错误修复——最后统计时超过 50 个。
您可以从 jQuery CDN 获取 Beta 版本
请帮助我们,将此代码放入您现有的应用程序中,并告诉我们是否有任何功能不再起作用。请 提交错误报告,并确保说明您正在测试 jQuery 1.7 BETA 1。
同时,请务必探索所有新功能,并查看您最讨厌的错误是否已修复。如果您等到最终版本再进行测试,就太晚了!
与往常一样,我们希望鼓励社区中的每个人尝试 参与并为 jQuery 核心做出贡献。我们建立了一个 完整页面,专门介绍如何更多地参与团队工作。团队随时准备帮助您帮助我们!
哦,您可能想知道发生了什么变化,对吧?Addy Osmani 已经用他的 最新文章做了一个很好的开始,所以让我们来介绍一下他的文章中没有的内容。
新的事件 API:.on() 和 .off()
随着时间的推移,jQuery 演化出了三种将事件附加到元素的方法:.bind()、.live() 和 .delegate()。然而,在所有这些之下,这三个事件 API 都会调用浏览器的事件系统;这可能会导致令人惊讶的交互。例如,$(document).unbind("click") 将删除所有 .live("click", ...) 事件,因为这些委托事件附加到 document。(这也是为什么您应该使用 事件命名空间。)
我们当前的事件 API 很快就不会消失了,但为了解决这些不一致性,我们引入了一对新的简单事件方法,可以完成所有三个方法的工作
$(elems).on(events, selector, data, fn);
$(elems).off(events, selector, fn);
如果提供了 selector,则是一个委托事件;否则,直接绑定。旧 API 的所有功能都在那里;例如,events 可以是空格分隔的事件名称和/或命名空间的字符串,也可以是一个对象,其中键是事件,值是事件处理程序函数。以下是一些旧方法映射到新方法的示例
| 旧 API | 新 API |
|---|---|
| $(elems).bind(events, fn) | $(elems).on(events, fn) |
| $(elems).bind(events, { mydata: 42 }, fn) | $(elems).on(events, { mydata: 42 }, fn) |
| $(elems).unbind(events, fn) | $(elems).off(events, fn) |
| $(elems).delegate(selector, events, fn) | $(elems).on(events, selector, fn) |
| $(elems).undelegate(selector, events, fn) | $(elems).off(events, selector, fn) |
| $(selector).live(events, fn) | $(document).on(events, selector, fn) |
| $(selector).die(events, fn) | $(document).off(events, selector, fn) |
IE 6/7/8 中的表单更改和提交事件
这些旧版本的 Internet Explorer 可能还会困扰我们一段时间,因此我们花了一段时间来尝试改进它们的行为。对于它们,事件传递性能得到了极大的提高,但最大的变化是我们使用不同的方法来修复它们的非冒泡和损坏的表单事件。因此,我们能够大大简化和缩短特殊事件代码。这些事件应该可以正常工作——甚至比以前更好,因为我们修复了大约半打相关的错误——但请留意任何异常行为。
动画改进
在 1.7 版本之前,如果您在动画完成之前停止了动画,可能会导致被动画化的元素永远无法恢复到其原始大小;它基本上会卡在动画停止时的高度。我们通过记住动画开始前的原始尺寸来修复了这个问题,以便稍后可以使用它们。这消除了在使用某些动画(特别是切换动画)时的一个主要烦恼。
.removeData() 增强功能
Addy 也提到了这一点,但 .removeData() API 现在允许您传递一个空格分隔的名称字符串或一个要删除的名称数组。由于之前允许在数据名称中使用空格,因此代码首先检查您指定的确切名称,然后再按空格分割字符串。这样,任何现有代码都不会因为此增强功能而中断。
jQuery 1.7 BETA 1 变更日志
这是 1.7 BETA 1 版本的完整更改列表。
Ajax
- #9399:弃用 jqXHR.success 和 jqXHR.error
属性
核心
Css
- #10267:IE8 和 window.is(‘:visible’) 崩溃
数据
Deferred
Effects
- #5684:效果:动画回调中的异常导致无限循环
- #6150:.stop 有时无法清除 .delay
- #6641:在动画完成回调中调用 stop() 会导致其他动画冻结
- #8685:动画应跟踪动画状态,以便正确处理堆叠动画
- #9280:允许为 animate() 使用多个效果队列
- #9548:animate 不适用于 svg 元素的 fill-opacity css 属性
事件
- #3368:event.metaKey 应仅在非 Mac 上分配给 event.ctrlKey
- #6170:jQuery(window).scroll(); 会导致 IE* 滚动到 0,0
- #6319:在 IE 中,change 处理程序内的 stopPropagation 会错误地应用于 keydown 事件
- #6386:支持通过“event.special.live.add”获取 live 事件的数据参数
- #6593:IE8:通过 jQuery 附加的 DOM 0 事件处理程序在单独的处理程序时会被调用两次
- #6667:在某些条件下,submit 事件在 IE* 中无法委托
- #6705:focus() 在 IE8 中导致 focus 事件被处理两次
- #6903:特殊事件需要一种方法来确定它们是使用 .bind 还是 .live/.delegate 绑定的
- #6942:JQuery.event.fix 会导致在处理关键事件时出现不必要的重绘
- #7139:“hover”事件别名应适用于 .bind 以及 .live
- #7161:表单元素上的提交事件在 IE 中未正确解绑
- #7444:使用“Enter”而不是按钮单击提交表单时,IE8 或 IE7 会触发 live 提交事件两次。
- #8157:聚焦一个已经聚焦的文本字段会阻止 change 事件在 IE 中触发
- #8728:当离开的元素被移除时,mouseenter 事件不会触发
- #8789:Meta:事件属性挂钩
- #8858:特殊事件 – _default 方法无法访问 trigger 方法的数据参数
- #8866:IE8 input[type=file] 委托的 change 事件文件仅在 blur 时触发
- #8982:bind(“unload someOther”) => 在卸载时,处理程序不会只执行一次。
- #9069:当鼠标悬停在元素的子元素上时,使用 live 或 delegate 会触发 mouseleave
- #9279:delegate() bind 无法正确处理所选元素的 mouseover/mouseout 和 mouseenter/mouseout
- #9393:统一和简化事件系统
- #9593:在 IE 中,委托的 submit 事件不是 jQuery.Event 的实例
- #9724:当 window.parentNode 是 DOM 元素时,trigger 函数中出现无限循环
- #9901:使用 .delegate 时 event.handleObj.namespace 不正确
- #9933:jQuery.fn.toggle() 应将状态存储在私有数据对象中
- #9951:在处理程序中修改 DOM 时,.trigger() 的顺序错误
操作
选择器
- #5637:布尔值(和空)属性选择器失败
- #7128:由于使用 DOM 属性,属性选择器在 qSA 和 Sizzle 之间不一致
- #9261:Has Attribute 在 filter/children/siblings 中不起作用
- #9570:选择器 $(‘form[name=”..”]’) 在某些条件下在 IE8 中返回零个元素
- #10178:$(window).is(“a”) >> 未捕获的 TypeError:无法对未定义的调用方法 ‘toLowerCase’
- #10315:Sizzle 在使用位置选择器时忽略 seed 参数
支持
- #6809:添加 jQuery.support.fixedPosition