I came across this issue while looking at LAB.js. Is this known to be fixed in latest nightly? From what I can tell document.ready still won't fire if jQuery is loaded after DOM Ready has occurred. Here's my test code:
// make sure dom ready has already happened by attaching an event to old school window.onload window.onload = function() { console.log('window onload fires'); var url = "http://code.jquery.com/jquery-nightly.js"; var head = document.getElementsByTagName("head")[0], done = false; var script = document.createElement("script"); script.src = url; script.onload = script.onreadystatechange = function() { if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) { console.log('jquery nightly is done loading'); done = true; $(document).ready(function() { console.log('dom ready functions should fire now'); }); } }; head.appendChild(script); }; - Sasha On Oct 8, 5:18 pm, Michael Geary <m...@mg.to> wrote: > Failing to run the document ready functions is a bug in jQuery 1.3.2 that is > fixed in the current svn. It now calls document.ready listeners even if you > load jQuery and subsequent document ready functions dynamically. > > At least I *assume* that it's a bug that was fixed, and not just an > accidental improvement! :-) > > Try your code with the nightly you can get here: > > http://docs.jquery.com/Downloading_jQuery#Nightly_Builds > > Regarding the onload for the script, the best way to handle this is to make > a custom copy of jquery.js or jquery.min.js and add a line to the end: > > window.jQueryLoaded && jQueryLoaded(); > > Then you provide a global jQueryLoaded() function before loading jQuery, and > that has your other initialization code (using document ready if you want > with the new jQuery code). > > Or you can add whatever initialization code you want at the end of your > jquery.js file. > > -Mike > > p.s. Speaking of jQuery svn, are there nightly builds or the like > > On Thu, Oct 8, 2009 at 6:11 AM, Ryan Crumley <crum...@gmail.com> wrote: > > > Rob, > > > Point taken about using onLoad for a script tag possibly not being > > supported. In this case however that part of the code is working fine. > > The issue I am having is related to jQuery being added to a page after > > the page has completed loading. When this happens ready listeners are > > never executed. If jQuery is present when the page loads then ready > > listeners are executed as expected. > > > Ryan > > > On Oct 8, 12:45 am, RobG <robg...@gmail.com> wrote: > > > On Oct 8, 10:04 am, Ryan Crumley <crum...@gmail.com> wrote: > > > > > I am experiencing unexpected behavior using $(document).ready() on a > > > > page where I inject jQuery after the page has loaded and then attach > > > > listeners to the ready event. The ready() event is never called using > > > > Firefox and Safari however it is called using IE. > > > [...] > > > > function loadjquery() { > > > > var url = " > >http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/ > > > > jquery.js"; > > > > var head = > > document.getElementsByTagName("head")[0], done = false; > > > > var script = document.createElement("script"); > > > > script.src = url; > > > > > script.onload = script.onreadystatechange = > > function() { > > > > There is no onload attribute for script elements defined in HTML 4.01, > > > therefore you should not expect that a script element will fire a load > > > event. The fact that some browsers do and some don't should be enough > > > to tell you that browser behaviour is inconsistent. You are unlikely > > > to be able to reliably fix that with script. > > > > If you want a reliable indicator that a script has finished loading > > > and is ready for use, put a statement at the bottom like: > > > > var SCRIPT_LOADED = true; > > > > -- > > > Rob