Hi Yuval, It looks like you've solved the problem, and your solution is correct.
The reason you didn't find any jQuery-specific information about this is that it isn't a jQuery problem at all. It's a matter of JavaScript scoping. Your say_something function is defined inside another function, therefore the name "say_something" is local to that outer function and not available outside it. You'd have exactly the same problem if settings.js looked like this: function foobar() { function say_something(word){ alert(word); } } There is no need for your say_something() definition to be located inside a $(document).ready() callback function. By defining it directly at the top level (not inside another function), you make it available globally, which is just what you need: function say_something(word){ alert(word); } -Mike > From: Yuval > > Hey Guys, > I have 2 files. index.html and settings.js > > inside settings.js: > > $(document).ready(function(){ > function say_something(word){ > alert(word); > } > }) > > inside index.html > > <script language="javascript"> > $(document).ready(function(){ > say_something("hello"); > }); > </script> > > I am using Firefox 2 with Firebug and it claims the function > is not defined. The code does not work. > So why is this a jQuery problem, you ask? > Well, if I remove the $(document).ready call from the > external file, everything works fine! > > this is what it looks like when it works: > > inside settings.js: > > // no $(document).ready call > function say_something(word){ > alert(word); > } > > inside index.html > > <script language="javascript"> > $(document).ready(function(){ > say_something("hello"); > }); > </script> > > I've been searching Google and the forum for almost 2 hours > now with no answer to why this does not work with > $(document).ready. Any ideas? > Thank you, > Yuval > > p.s. replacing <script language="javascript"> with <script > language="text/javascript"> simply suppresses the error, it > does not solve the problem.