0

I have this folder structure:

index.php

js/scripts.js

In index.php I have a JavaScript function defined called execute().

Now within index.php I have a form that when submitted will call email.php and at the end of the execution of the email.php I do this:

echo '<script type="text/javascript">parent.execute();</script>';

This all works fine.

Now when I move execute() into scripts.js and I put this line of code in index.php:

<script type="text/javascript" src="js/script.js"></script>

then email.php is somehow unable to find execute() function. I know this because if I modify the execute function only the original version (the one that was in index.php) is ran.

I know this is weird, but I am new to this and I don't know of anyway I can debug this. Is there something obvious that I am missing?

6
  • 1
    if you're moving it to the js file why not just call the function at the end of the email.php file, <script>execute();</script>? you won't need to do any scoping like parent in that case Commented Feb 13, 2013 at 3:06
  • 1
    Debug by hitting f12 in your browser and setting a breakpoint. Commented Feb 13, 2013 at 3:07
  • how will email.php know where to find execute()? Commented Feb 13, 2013 at 3:07
  • the form is sumited into an iframe yes Commented Feb 13, 2013 at 3:27
  • What's the contents of .scripts.js? Commented Feb 13, 2013 at 3:44

1 Answer 1

0

First, make sure you don't have a typo in your <script> tag. You've referred to your external script file as both script.js and scripts.js. One little 's' can make all the difference.

Assuming you've included your script correctly, most likely, you have put execute within another function, thus taking it out of the global scope. That would be the case if script.js looks something like this:

(function () {
    ...
    function execute () {
        ...
    }
})();

If that's the case, move execute out of it's containing function. You can also put execute in the global scope by explicitly making it a property of window:

window.execute = function execute () {
    ...
};

If you do it this way, it's fine to leave execute within another function.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.