Side navigation
#5851 closed bug (fixed)
Opened January 18, 2010 02:54PM UTC
Closed January 27, 2010 03:07PM UTC
Last modified March 09, 2012 04:39PM UTC
IE8 does not support the change event while using live
Reported by: | matiasnu | Owned by: | brandon |
---|---|---|---|
Priority: | major | Milestone: | 1.4.2 |
Component: | event | Version: | 1.4.1 |
Keywords: | Cc: | ||
Blocked by: | Blocking: |
Description
According to http://jquery14.com/day-01/jquery-14
The change and submit events work reliably across browsers for both normal and live events. We override the normal change and submit events in Internet Explorer and replace them with events that work identically to the other browsers.
This is not true for IE8, which seems to ignore live bound change events. (is I use bind, it works as advertised, though)
Attachments (4)
Change History (10)
Changed January 18, 2010 03:15PM UTC by comment:1
Changed January 18, 2010 04:40PM UTC by comment:2
I'm seeing the same thing here. Support for all events in live() across all the major browsers was the reason we just upgraded.
Changed January 18, 2010 10:46PM UTC by comment:3
I have already posted a possible fix in the old discussion-group:
I have looked into this. The "trigger-line" in the testChange-function
has to be changed from this:
return jQuery.event.trigger( e, arguments[1], this );
to this:
return jQuery.event.trigger( e, arguments[1], elem );
Additional It seems, that there was a typo. The condition above
contains the following statement:
elem.type !== "select"
wich is always true. I think this can be deleted, without problems.
Some further infos about what is causing the bug, can be also found in the post:
http://groups.google.com/group/jquery-dev/browse_thread/thread/e74de6015020d160#msg_97e3d41e210ebcc8
Changed January 18, 2010 10:53PM UTC by comment:4
resolution: | → fixed |
---|---|
status: | new → closed |
Changed January 26, 2010 12:51PM UTC by comment:5
resolution: | fixed |
---|---|
status: | closed → reopened |
It seems that 1.4.1 does not detect the first change on an element in IE8 but the following changes work as expected. (attaching @simonjefford test case using 1.4.1 instead)
Changed January 26, 2010 04:29PM UTC by comment:6
Problem seems to be in the testChange function. It's is using jQuery.data to cache the value of the input. The first time called it tries to get the previous value and it's undefined since it hasn't been cached yet. It returns without triggering the event because of the if check that fires because it's undefined. The next time through the cache has been created for the element with it's previous value and it can evaluate the change properly.
Changed January 26, 2010 05:23PM UTC by comment:7
Changing the beforeactivate function to the following seems to fix this issue in IE:
var elem = e.target;
if (elem.nodeName.toLowerCase() === "input" || elem.nodeName.toLowerCase() === "textarea") {
jQuery.data(elem, "_change_data", getVal(elem));
}
Changed January 27, 2010 03:07PM UTC by comment:8
resolution: | → fixed |
---|---|
status: | reopened → closed |
Changed January 27, 2010 03:07PM UTC by comment:9
milestone: | 1.4.1 → 1.4.2 |
---|---|
version: | 1.4 → 1.4.1 |
Changed February 15, 2011 09:29PM UTC by comment:10
This seems to be broken again in IE9
This text should also be changed until the bug is fixed;
All Events Can Be Live Events
With the exception of ready, focus (use focusin instead), and blur (use focusout instead), all events that can be bound using .bind() can also be live events.
We’re very proud to count some addtional events amongst those supported by live(). 1.4 introduces cross-browser support for
change, submit, focusin, focusout, mouseenter, and mouseleave via the event delegation in .live().