jQuery 1.7 Beta 1 Released

Posted on by

If you hadn’t heard, jQuery Conference 2011 is taking place in Boston later this week. We’ve put together a little something we like to call jQuery 1.7 Beta 1 that we’ll be talking a lot more about at the conference. It’s got a lovely bunch of new features and significant bug fixes–more than 50 of them at last count.

You can get the beta from the jQuery CDN:

Please help us by dropping this code into your existing application and letting us know if anything no longer works. Please file a bug ticket and be sure to mention that you’re testing against jQuery 1.7 BETA 1.

Also be sure to explore all the new features and see if your favorite pet-peeve bug has been fixed. If you wait until the final release to do your testing it will be too late!

As always, we want to encourage everyone from the community to try and get involved in contributing back to jQuery core. We’ve set up a full page of information dedicated towards becoming more involved with the team. The team is here and ready to help you help us!

Oh, you probably want to know what changed, right? Addy Osmani has made a great start with his recent post, so let’s cover the stuff that isn’t on his list.

New Event APIs: .on() and .off()

Over time, jQuery has evolved three ways to attach events to elements: .bind() , .live(), and .delegate(). Underneath it all, though, the three event APIs call the browser’s event system; that can lead to surprising interactions. For example, $(document).unbind("click") will remove all .live("click", ...) events, since those delegated events are attached to document. (This is also why you should use event namespaces.)

Our current event APIs aren’t going away soon, but to address the inconsistencies we’ve introduced a new and simple pair of event methods that can do the work of all three:

    $(elems).on(events, selector, data, fn);
    $(elems).off(events, selector, fn);

If a selector is provided, it’s a delegated event; otherwise it’s directly bound. All the features of the old APIs are there; for example events can be a space-separated string of event names and/or namespaces, or it can be an object where the keys are events and the values are event handler functions. Here are some examples of how the old methods map into the new ones:

Old API New 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)

Form Change and Submit Events in IE 6/7/8

These old Internet Explorer versions are likely to be haunting us for some time, so we’ve spent a while trying to improve their behavior. Event delivery performance has been greatly improved for them, but the biggest change is that we are using a different approach to fix their non-bubbling and broken form events. As a result we were able to greatly simplify and shorten the special events code. These events should work without any problems–even better than before, since we closed about a half-dozen related bugs–but please keep your eyes open for any unusual behavior.

Animation Improvements

Before version 1.7, if you stopped an animation before it completed it could create a situation where the element being animated would never return to its full size; it would essentially be stuck at the height that it was when the animation was stopped. We’ve fixed that by remembering the original dimensions before the animation starts so that they can be used later. This eliminates a major annoyance in using certain animations, particularly toggling ones.

.removeData() Enhancements

Addy mentioned this one as well, but the .removeData() API now lets you pass either a space-separated string of names or an array of names to be removed. Since spaces were previously allowed in data names, the code first checks for the exact name as you specified it before splitting the string on spaces. That way, no existing code should break as a result of this enhancement.

jQuery 1.7 BETA 1 Change Log

Here is a complete list of changes made for the 1.7 BETA 1 release.

Ajax

  • #9399: Deprecate jqXHR.success and jqXHR.error

Attributes

  • #5479: removeAttr: remove multiple attributes
  • #10278: checkboxEl.attr(‘checked’) returns stale value after checkboxEl.click()

Core

  • #6485: Solution for HTML5 in IE
  • #7102: Register jQuery as a CommonjS async module
  • #9453: $.inArray does not support fromIndex

Css

  • #10267: IE8 and window is(‘:visible’) crashes

Data

  • #7323: Allow removing multiple data keys at once with $.fn.removeData
  • #8909: $(element).data() will scan all attributes more than needed.
  • #8921: jQuery private data should stay private

Deferred

  • #8856: Request: deferred.isUnresolved()
  • #9033: try{ } finally{ } error in IE8
  • #9398: Proposal for Improved Deferreds

Effects

  • #5684: Effects: exception in animation callback causes endless loop
  • #6150: .stop sometimes doesn’t clear .delay
  • #6641: Calling stop() within animation finished callback causes other animations to freeze
  • #8685: Animations should keep track of animation state in order to properly address stacked animations
  • #9280: Allow multiple effect queues for animate()
  • #9548: animate does not work with fill-opacity css property for svg elements

Event

  • #3368: event.metaKey should be assigned to event.ctrlKey on Non-Mac only
  • #6170: jQuery(window).scroll(); causes IE* to scroll to 0,0
  • #6319: Regression: stopPropagation inside change handlers in IE is incorrectly applied to keydown event
  • #6386: support data argument for live events via “event.special.live.add”
  • #6593: IE8: DOM 0 event handler called twice when a separate handler is attached via jQuery
  • #6667: submit event doesn’t delegate in IE* under certain conditions
  • #6705: focus() causes focus event to be handled twice in IE8
  • #6903: special events need a way to determine whether they are being bound with .bind vs .live/.delegate
  • #6942: JQuery.event.fix causes unnecessary reflows in IE when handling key events
  • #7139: “hover” event alias should work for .bind as well as .live
  • #7161: Submit event on a form element not unbound properly in IE
  • #7444: Submitting form with “Enter” instead of button click on ie8 or ie7 triggers live submit event twice.
  • #8157: Focusing an already focused text field will prevent the change event from firing in IE
  • #8728: Event ‘mouseenter’ not firing when the element being left is removed on leaving
  • #8789: Meta: Event Property Hooks
  • #8858: Special events – _default method doesn’t have access to the `data` argument of the trigger method
  • #8866: IE8 input[type=file] delegated change event files only on blur
  • #8982: bind(“unload someOther”) => on unload, handler is not executed only once.
  • #9069: when hover over a child of an element, mouseleave fires when using live or delegate
  • #9279: delegate() bind does not handle mouseover/mouseout and mouseenter/mouseout correctly for selected elements
  • #9393: Unify and DRY out event system
  • #9593: Delegated submit event is not instanceof jQuery.Event in IE
  • #9724: Infinite loop in trigger function when window.parentNode is a DOM element
  • #9901: event.handleObj.namespace incorrect when using .delegate
  • #9933: jQuery.fn.toggle() should store state in private data object
  • #9951: Wrong order in .trigger() when DOM is modified in a handler

Manipulation

  • #6782: carefully allow more strings to use innerHTML
  • #7037: Duplicate mouseover and mouseout events added to cloned element.

Selector

  • #5637: Boolean (and Empty) Attribute Selectors Fail
  • #7128: attribute selector is inconsistent between qSA and Sizzle due to use of DOM properties
  • #9261: Has Attribute not working in filter/children/siblings
  • #9570: Selector $(‘form[name=”..”]’) returns zero elements in IE8 under some conditions
  • #10178: $(window).is(“a”) >> Uncaught TypeError: Cannot call method ‘toLowerCase’ of undefined
  • #10315: Sizzle ignores seed argument when using positional selectors

Support

  • #6809: Add jQuery.support.fixedPosition

Just Added: HTML5 Training at jQuery Conference Boston!

Posted on by

Update: For the first time ever, we have a conference signage sponsor. Thanks to custom signs shop Signazon for your support.


The Boston conference is sold out (thanks everyone!), as is the Intro to jQuery training session, but the requests keep coming! In response to popular demand, we’ve added a second training scheduled for Friday, September 30th.

The training will focus on HTML5, and be taught by jQuery Core Team Member and Bocoup trainer Richard Worth. The price will be the same $299 (which, if you’ve been paying attention to HTML5 training rates, is a steal!).

Here’s some detail from the training description:

HTML5 is the next major milestone in HTML and it’s not just another incremental enhancement; it represents an enormous advance for modern web applications. A large number of HTML5 features are already supported in browsers, so it’s time to start using them!

In our HTML5 for Programmers Workshop, you will learn how to create HTML5 web pages and web applications using semantic HTML5 markup and cross-browser HTML5 JavaScript APIs. After completing this course, students will:

  • Know how to use semantic HTML5 Markup
  • Know how to use cross-browser HTML5 JavaScript APIs
  • Understand current browser support for the various HTML5 features
  • Understand how to polyfill HTML5 features on older browsers

Our training takes a step-by-step approach, solidifying fundamental concepts and building on them to leave each attendee with a more thorough understanding of HTML5. Using a 50% lecture / 50% lab format, attendees will be able to put the concepts they have just learned to use after each section.

  • HTML5 Overview
  • Using HTML5 Today
  • Markup
  • Forms
  • Canvas
  • Video and Audio
  • Drag and Drop
  • Geolocation
  • Web Storage
  • Web Workers
  • Communication and Web Sockets

This course is designed for software developers interested in designing, creating, and deploying HTML5 web applications. It is valuable to developers that already have experience in developing web applications. To get the most out of the course, you should be familiar with HTML, CSS, and JavaScript.

Prior exposure to any of these concepts will be helpful, but not required: AJAX, XML, jQuery, HTTP, REST.

It’s short notice, but we hope you can make it, so register now! As always, feel free to email events@jquery.org with any event related questions.

See you all at the show!

jQuery 1.6.4 Released

Posted on by

jQuery 1.6.4 Released

This is a minor point release of jQuery. We’re releasing it fix a couple issues that came up during the release of jQuery 1.6.3.

You can get the code from the jQuery CDN:

You can help us by dropping that code into your existing application and letting us know that if anything no longer works. Please file a bug and be sure to mention that you’re testing against jQuery 1.6.4.

We want to encourage everyone from the community to try and get involved in contributing back to jQuery core. We’ve set up a full page of information dedicated towards becoming more involved with the team. The team is here and ready to help you help us!

jQuery 1.6.4 Change Log

The current change log of the 1.6.4 release.

Data

  • #10194: Data attribute names with single dash-surrounded letters cannot be accessed by the camel-case name

Event

  • #10208: $(“form”).live(“submit”, fn) not fired from <button type=”submit”> in IE8

Support

  • #10197: Bug with mime-type application/xhtml+xml in jquery 1.6.3

jQuery 1.6.4 RC1 released

Posted on by

jQuery 1.6.4 will be released soon, and we need your help with this release candidate to find any remaining bugs. We’re putting out a new version to address a few last-minute bugs that crept into the 1.6.3 release. With version 1.7 coming next month, we felt it was important to fix these bugs and finalize the 1.6.x line before making more extensive changes and feature additions.

Feel free to do your testing by including either one of these files (one minified and one uncompressed). If you find any important differences from 1.6.3, please file a bug as soon as possible and be sure to mention that you’re testing against jQuery 1.6.4 RC1. Our preferred venue for test cases is jsFiddle; you can just use the “jQuery (edge)” selection there.

jQuery 1.6.4 RC1 Change Log

The current change log of the 1.6.4 release:

Data

  • #10194: Data attribute names with single dash-surrounded letters cannot be accessed by the camel-case name

Event

  • #10208: $(“form”).live(“submit”, fn) not fired from <button type=”submit”> in IE8

Support

  • #10197: Bug with mime-type application/xhtml+xml in jquery 1.6.3

Please do file a bug report with a test case as soon as possible if you find problems, as described above. Blog comments or Twitter aren’t helpful bug reports!

jQuery 1.6.3 Released

Posted on by

jQuery 1.6.3 is now out! This is the third minor release on top of jQuery 1.6 and lands a number of fixes for bugs, as listed below.

As usual, we provide two copies of jQuery, one minified and one uncompressed (for debugging or reading).

You can help us by dropping that code into your existing application and letting us know if anything no longer works. Please file a bug and be sure to mention that you’re testing against jQuery 1.6.3.

Many thanks to all the people who reported bugs, submitted patches, and otherwise helped with this release! We want to encourage everyone from the community to get involved in contributing back to jQuery core. We’ve set up a full page of information dedicated towards becoming more involved with the team. The team is here and ready to help you help us!

Highlights

Fix an XSS attack vector: User ma.la reported a common pattern that many sites are using to select elements using location.hash that allows someone to inject script into the page. This practice seemed widespread enough that we decided to modify the selector recognition to prevent script injection for the most common case. Any string passed to $() cannot contain HTML tags (and thus no script) if it has a “#” character preceding them. See the ticket linked above for more information and a test case.

No more animation “worm holes”: We had high hopes for the browser’s requestAnimationFrame API when we added support into version 1.6. However, one of the highest-volume complaints we’ve received since then relates to the way requestAnimationFrame acts when a tab is not visible. All the animations initiated when the tab is invisible “stack” and are not executed until the tab is brought back into focus. Then they all animate at warp speed! We’ve removed support for this API (which has no impact on the way you call jQuery’s animation features) and plan to incorporate it into a future version of jQuery.

Better handling of HTML5 data attribute names: The $().data() API serves double-duty, handling data for the internal use of jQuery and plugins in addition to reading initial values of HTML5 data- attributes. We’ve improved the ability to use HTML5 conventions such as converting camel-case to camelCase when needed. Remember, however, that the $().data() API only reads the HTML5 data- attributes initially, and does not keep subsequent data changes in sync with attributes for performance reasons. To update the actual attributes in the HTML markup, use .attr().

jQuery 1.6.3 Change Log

The change log of the 1.6.3 release:

Ajax

  • #9255: jQuery.parseXML error handling does not work in webkit browsers
  • #9854: Pass statusText through instead of “normalizing” it
  • #9887: jQuery.ajaxSetup may cause unnecessary memory usage
  • #9970: Typo in ajax.js: status should be jqXHR.status?
  • #10098: Encode comment-like Accept headers to avoid mobile carrier mangling

Attributes

  • #9630: foo.contents().hasClass() returns incorrect value
  • #9699: removeAttr(‘style’) does not consistently remove the style attribute in webkit
  • #9719: removeAttr(‘disabled’) doesn’t change input’s color on IE6
  • #9979: .prop(‘tabIndex’) returns inconsistent results for elements that have not yet set tabIndex
  • #9980: Simplify the attr code by using getAttributeNode for everything in IE6/7

Build

  • #9988: Minimal License Header in compressed jQuery

Core

  • #9521: XSS with $(location.hash) and $(#) is needed?
  • #9897: try-catch isPlainObject detection
  • #10076: $.inArray crashes IE6 and Chrome if second argument is `null` or `undefined`

CSS

  • #6652: Remove filter:alpha(opacity=100) after animation
  • #9572: Support -ms-transform in .css() method
  • #10021: Can’t add negative numbers using the relative-value syntax with .css() and .animate()

Data

  • #8235: jQuery.data throws a script error in certain circumstances
  • #9318: HTML5 data attributes has strange behaviour with if attribute names contain numbers
  • #9413: $.fn.removeData does not remove data with a dash in a name
  • #9779: Allow non-null|undefined evaluation of data property values
  • #9794: jQuery.fn.data() correctly handle access to arbitrary data property values
  • #10016: Cannot retrieve “false-y” values under key names with dashes using jQuery.data method
  • #10080: unload from frame’s window breaks in IE8

Dimensions

  • #10123: .width() can return a float in Firefox 6

Effects

  • #9381: Animations halt when the browser is out of focus due to requestAnimationFrame
  • #9678: setInterval cleared by animation

Event

  • #7071: Accessing the ‘type’ property on VML elements fails on IE during submit special handler

Manipulation

  • #9587: Cloning a div with an object causes error in IE8

Support

  • #9634: Visible “t” character in upper left corner during support.js init
  • #9823: IE 8 crashes when using background-image on BODY in css
  • #9964: test/support.js module strictEqual typo
  • #10029: $.support.scriptEval removed, but still included in documentation

Please do file a bug report with a test case as soon as possible if you find problems, as described above. Blog comments or Twitter aren’t helpful bug reports!