The way events are handled has changed in version 1.7. Before <span> is added to the DOM, events triggered on it will not bubble up to <body> as they once were (mistakenly, in my opinion, behavior 1.7 makes a lot more sense).
Perhaps the event fires on <span> , but since the event does not bubble on <body> , the actual handler that deals with your .live() installation cannot be called.
edit - this may be a document element for which events are bubbling; no matter the point is the same.
change again - Here you can do this work so that you can run handlers before adding your elements to the DOM:
$('<div></div>').on('click', 'span', function() { this.innerHTML = "Changed!"; }).append($('<span>span</span>')) .find('span').click().end() .appendTo($('body'));
This sets the click handler as a delegated handler on the nascent <div> directly. Then, adding a new <span> to this element, then you can call "click" on <span> and call the handler. This happens before all this is added to <body> .
source share