Hi, I'm still new to jQuery, but I have been playing with SlickGrid and trying to integrate both it and jQuery with some JavaScript library code that I had already developed. When I tried to integrate my code with jQuery, I spent 2 frustrating hours trying to figure out what was going on thanks to Firefox's descriptive (and apparently equivalent to the famous BASIC 'syntax error') error message:
uncaught exception: [Exception... "String contains an invalid character" code: "5" nsresult: "0x80530005 (NS_ERROR_DOM_INVALID_CHARACTER_ERR") location: ".../jquery-1.3.2.js Line: 1026"] After much wrangling, commenting, uncommenting, debugging, etc., I discovered that the cause is an assumption in jQuery that Object doesn't have any non-literal property values. For good or bad JavaScript style, my library defines a couple of utility functions on Object.prototype to assist in both debugging as well as prototypical inheritance. When jQuery does this: 181 // Check to see if we're setting style values 182 return this.each(function(i){ 183 // Set all the styles 184 for ( name in options ) { 185 jQuery.attr( 186 type ? 187 this.style : 188 this, 189 name, jQuery.prop( this, options[ name ], type, i, name ) 190 ); 191 } 192 }); What happens is that it attempts to set an attribute value name equal to the definition of a function. Of course, there's all kinds of invalid characters in there, so Firefox pukes the above error message. Adding the following check prevents the error and allows adding methods to Object instances. 181 // Check to see if we're setting style values 182 return this.each(function(i){ 183 // Set all the styles 184 for ( name in options ) { 185 if ( typeof this[ name ] !== 'function' ) { 186 jQuery.attr( 187 type ? 188 this.style : 189 this, 190 name, jQuery.prop( this, options[ name ], type, i, name ) 191 ); 192 } 193 } 194 }); I'm not sure what you think about the above, but it would be really handy if this was fixed in the upstream jQuery codebase. I don't know if anyone else has hit this problem or not, but it at least bears recording for posterity in any case. :) Cheers, ast