I wanted everyone to know that I was stupid to be testing this in IE8's IE7 backwards compatability mode. This error never occurs in the real IE7. It's just a warning for everyone, never use IE8's backwards mode when web designing.
On Sep 4, 2:22 pm, "T.J. Crowder" <[email protected]> wrote: > Hi JoJo, > > Excellent example of a pared-down test case, thanks for that. > > I don't have time right now to try this, but just quickly: You say > that the code in the load event never runs, are you sure you haven't > interrupted it by clicking the button really early and causing the > error? The window.load event happens quite late in the overall load > process; you might consider using > > document.observe("dom:loaded", function() { > // ... > > }); > > instead, it happens earlier and might reduce the window of time in > which a user can cause the problem... > > (This is speculation at present.) > -- > T.J. Crowder > tj / crowder software / comwww.crowdersoftware.com > > On Sep 4, 9:22 pm, JoJo <[email protected]> wrote: > > > So I did quite a lot of tests with the above script. Whenever the > > error occurs, the Event.observe was never run. You can stick other > > code in that event, and it will not run. Now that I'm testing on > > another computer, it seems to only fail 10% of the time on IE8 in IE7 > > mode. > > > On Sep 4, 10:01 am, JoJo <[email protected]> wrote: > > > > Hi TJ, > > > > This is the simple script which will say "MYAPP.class1 is null or not > > > an object - Line 33" about 25% of the time on IE8 in IE7-compatability- > > > mode. You must hit refresh a few times and then click the button to > > > see the error. Maybe we need to find out what makes IE7 and 6's JS > > > engine different from IE8's. > > > > ++++++++++++++++++++++++++++++++++++++++++++++++ > > > > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" > > > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> > > > <html> > > > <head> > > > <script src="scripts/lib/prototype.js" type="text/ > > > javascript"></script> > > > <script src="scripts/src/scriptaculous.js" type="text/ > > > javascript"></script> > > > <script type="text/javascript"> > > > //<![CDATA[ > > > var MYAPP = { > > > Class1: null, > > > class1: null > > > } > > > > MYAPP.Class1 = Class.create({ > > > initialize: function() { > > > this.myValue = 'my value'; > > > }, > > > speak: function() { > > > alert(this.myValue); > > > } > > > }); > > > > Event.observe(window, 'load', function() { > > > MYAPP.class1 = new MYAPP.Class1(); > > > }); > > > //]]> > > > </script> > > > </head> > > > <body> > > > <button onclick="MYAPP.class1.speak()" />make class1 speak</ > > > button> > > > </body> > > > </html> > > > > +++++++++++++++++++++++++++++++++++++++++++++++++++++ > > > > On Sep 4, 12:51 am, "T.J. Crowder" <[email protected]> wrote: > > > > > Hi JoJo, > > > > > I suspect there's some small (but important) piece of information or > > > > understanding that you don't have, being a beginner, but we're > > > > shooting a bit in the dark trying to identify it. > > > > > Can you create an example of the problem using one very simple HTML > > > > file and (say) two script files? (Three if you need it to make the > > > > problem occur.) Paste them in Pastie[1] and drop us a link here, and > > > > we'll try to figure it out. > > > > > FWIW, I've never had a problem with files getting loaded and executed > > > > out of order. I find it very, very hard to believe that that's > > > > actually happening (Alex, if you have a reference for your earlier > > > > comment, please do share it), the number of sites that would break is > > > > legion. > > > > > If that really _is_ happening, another way to solve it is to combine > > > > all of your JavaScript files into one file as part of a build > > > > process. There are good reasons for doing that anyway; more here.[2] > > > > > [1]http://pastie.org > > > > [2]http://proto-scripty.wikidot.com/prototype:tip-minimizing-download-times > > > > > HTH, > > > > -- > > > > T.J. Crowder > > > > tj / crowder software / comwww.crowdersoftware.com > > > > > On Sep 4, 7:17 am, JoJo <[email protected]> wrote: > > > > > > My classes are just class definitions. > > > > > > MYAPP.Class1= Class.create({...}); > > > > > MYAPP.Class2= Class.create({...}); > > > > > > I don't create the objects until I get to main.js, which creates them > > > > > after the window has loaded. Why is IE7 not giving an error when I > > > > > access MYAPP in Class1.js and Class2.js, but is giving an error when I > > > > > access it in main.js? This native and function object talk just went > > > > > straight over my head. I am only a beginner to JS. > > > > > > On Sep 3, 10:51 pm, RobG <[email protected]> wrote: > > > > > > > On Sep 4, 3:43 pm, RobG <[email protected]> wrote: > > > > > > > > On Sep 4, 4:40 am, JoJo <[email protected]> wrote: > > > > > > > > > ^ great article! > > > > > > > > > Now I have another question. Here is my new workflow in an > > > > > > > > attempt to > > > > > > > > execute files in the correct order across all browsers. It > > > > > > > > works in > > > > > > > > IE8, but not in IE7. In IE7 I get an error saying "object > > > > > > > > expected" > > > > > > > > on line 2 of main.js. This is not very descriptive; what does > > > > > > > > it > > > > > > > > mean? > > > > > > > > > (1) include my global wrapper MYAPP.js: > > > > > > > > > MYAPP = {class1: null, class2: null} > > > > > > > > MYAPP is an instance of the built-in Object object (i.e. a native > > > > > > > object). Because it has not been declared, it doesn't exist until > > > > > > > the > > > > > > > code is executed. > > > > > > > That is, until that line of code is executed. > > > > > > > > > (2) include Class1.js (no instantiation) > > > > > > > > (3) include Class2.js (no instantiation) > > > > > > > > (4) include main.js: > > > > > > > > > Event.observe(window, 'load', function() { > > > > > > > > MYAPP.class1 = new MYAPP.Class1(); > > > > > > > > Even if MYAPP exists at this point, the above won't work: the only > > > > > > > native objects that can be used as constructors are function > > > > > > > objects. > > > > > > > MYAPP is and native object, it can't be used as a constructor as > > > > > > > it > > > > > > > doesn't have an internal [[consruct]] method (functions do). > > > > > > > Ooops, you're actually calling MYAPP.Class1 as a constructor, hey > > > > > > nasty. You say the other script files don't to any instantiation, so > > > > > > how do the MYAPP.Class1 and 2 properties get set? > > > > > > > -- > > > > > > Rob --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Prototype & script.aculo.us" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~----------~----~----~----~------~----~------~--~---
