The following browsers are supported. If a browser is not supported, it still may work, but no effort is taken to test unsupported browsers and any specific fix for an unsupported browser is likely not to be done:
ContentPane now acts as a full layout widget, calling resize() on its child widgets when (not before) it is made visible, avoiding problems with children being initialized while hidden.
Fixes related to resizing and href loading, including avoiding premature href loading for ContentPanes in nested TabContainers
See also dijit.layout.ContentPane
Most dijit.form widgets fire the onChange event after a value change has been detected. With some widgets, this event fired synchronously before the attr('value',val) returned, while on other widgets, the event was asynchronous. In order to return control to the browser's UI thread sooner, and also to collapse onChange events that fire faster than the user handler can execute, the events will always fire asynchronously now, and consecutive, unprocessed onChange events will be collapsed into single events. User code that assumed onChange would always fire synchronously after a value change will have to be modified.
attr() (as a setter) has been enhanced to take optional arguments. The most common case for this is attr("value", val, false) which sets the value of a form widget without calling onChange(). (The third argument is called priorityChange.) When priorityChange is true (default), onChange() will fire only when the new value is different than the value that the previous onChange() reported.
dijit.popup.prepare() was renamed to moveOffScreen() for clarity about what the function actually does.
Several new plugins for the dijit.Editor RTE have been provided as dojox modules. Unless otherwise noted in their documentation, they are all generally well tested and work well across browsers.
The new Enhanced DataGrid extends the base grid in numerous useful ways.
Here are some common issues people have had when upgrading (ie, migrating) from 1.3 to 1.4: