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.

Reply via email to