31

I have this code:

    <script type="text/javascript">
    function js() {
        var getJs = document.getElementById("jogo");

        if (JS == true) { //if button JS is pressed - it is correct?

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


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

it doesn't work. I gave two buttons, if the first is pressed, file1.js should be loaded. In case the second one is pressed, file2.js should be loaded.

How can I do that?

3
  • what you mean with eval? thanks Commented Mar 8, 2011 at 16:35
  • if (JS == true) dosent mean it being pressed, it simply mean that element is exist in the DOM and why dont u just include all the script and then call the appropriate function based on the existence of the JS Commented Mar 8, 2011 at 16:36
  • 2
    @user455318: eval is used to execute a string as Javascript code @kjy112: no you do not. Please do not suggest eval as solution unless it's the only way to do. Bad guides would suggest code like eval("document."+id+".value="+numericValue). That is highly insecure! Commented Mar 8, 2011 at 16:38

5 Answers 5

74

You cannot embed HTML in Javascript in that way. Basically, what you want is to embed a script element, pointing to a certain javascript file when clicking a button. That can be done with combining events with DOM:

<script type="application/javascript">
function loadJS(file) {
    // DOM: Create the script element
    var jsElm = document.createElement("script");
    // set the type attribute
    jsElm.type = "application/javascript";
    // make the script element load file
    jsElm.src = file;
    // finally insert the element to the body element in order to load the script
    document.body.appendChild(jsElm);
}
</script>
<button onclick="loadJS('file1.js');">Load file1.js</button>
<button onclick="loadJS('file2.js');">Load file2.js</button>
Sign up to request clarification or add additional context in comments.

5 Comments

Please add note that functions from loaded javascript file are not available right after calling "document.body.appendChild(jsElm);", but there is jsElem.onload event that signals when js is ready.
What about using document.write(unescape("%3Cscript src='file.js' type='text/javascript'%3E%3C/script%3E"));
@Ithar document.write should be avoided, see developer.mozilla.org/en-US/docs/Web/HTML/…
Hi, @Lekensteyn I was working with the same dynamic javascript loading. I have used the above-mentioned code but still, my page gets stuck for 2-3 seconds and then my loader is displayed. Any advice on why it is happening. Tried async attribute as well.
@DeepanksheeJain if you have a large file, it may take a while before the download is completed.
13

Try this on for size: Dynamically Load JS

function loadjscssfile(filename){
  var fileref=document.createElement('script')
  fileref.setAttribute("type","text/javascript")
  fileref.setAttribute("src", filename)
 if (typeof fileref!="undefined")
  document.getElementsByTagName("head")[0].appendChild(fileref)
}

loadjscssfile("myscript.js") //dynamically load and add this .js file

Comments

6

JavaScript:

function loadScript(url)
{
    document.body.appendChild(document.createElement("script")).src = url;
}
function loadDefaultScript()
{
    loadScript("http://mysite.com/file1.js");
}
function loadAlternateScript()
{
    loadScript("http://mysite.com/file2.js");
}

HTML:

<input type="button" onclick="loadAlternateScript()" value="Alternate" />
<input type="button" onclick="loadDefaultScript()" value="Default" />

4 Comments

Don't forget to set the type parameter.
The type attribute is optional in HTML5.
The server is the authoritative source for the mime type. The type attribute is always ignored, not just for HTML5. There is no advantage to including it. It's actually a disadvantage because it's misleading.
you can take a look at the link: answer
0

You can use this function this will work perfectly

function loadjscssfile(filename, filetype){
 if (filetype=="js"){ //if filename is a external JavaScript file
  var fileref=document.createElement('script')
  fileref.setAttribute("type","text/javascript")
  fileref.setAttribute("src", filename)
 }
 else if (filetype=="css"){ //if filename is an external CSS file
  var fileref=document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", filename)
 }
 if (typeof fileref!="undefined")
  document.getElementsByTagName("head")[0].appendChild(fileref)
}

loadjscssfile("myscript.js", "js") //dynamically load and add this .js file
loadjscssfile("javascript.php", "js") //dynamically load "javascript.php" as a JavaScript file
loadjscssfile("mystyle.css", "css") ////dynamically load and add this .css file

1 Comment

you can take a look at the link: answer
0

Via Jquery:

 var getJSfile = function(src) {
            var jsfile = $("<script type='text/javascript' src='"+src+"'>");
            $("head").append(jsfile); 
        }; 

    getJSfile ("home.js");

1 Comment

you can take a look at the link: answer

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.