2011-01-05 11 views
5

ho bisogno di chiamare uno dei due JavaScript seconda condizione, in questo modo:JavaScript IF/ELSE per chiamare un altro JS Script?

<script type="text/javascript"> 
if(b_condition) 
    <script type="text/javascript" src="http://script1.js"></script> 
else 
    <script type="text/javascript" src="http://script2.js"></script> 
</script> 

Ma questo non funziona. Qualche idea su come chiamare un'altra chiamata JavaScript in un blocco If/Else?

+0

Creare un elemento di script – Stardust

risposta

-1
<script type="text/javascript"> 
    if(b_condition) 
     document.write('<script type="text/javascript" src="http://script1.js"></script>'); 
    else 
     document.write('<script type="text/javascript" src="http://script2.js"></script>'); 
</script> 
+0

Si prega di non sostenere document.write() più, questa è una pratica orribile per le prestazioni perché blocca tutto il resto durante l'esecuzione. –

+0

Ryan, grazie per avermelo fatto notare! – alexwen

+0

come visto qui (http: // StackOverflow.it/questions/802854/why-is-document-write-considered-a-bad-practice) sembra che sia corretto usare document.write in casi estremamente semplici come il mio esempio. disaccordo? – Shafique

0

Se gli script non sono enormi e/o non c'è altra ragione per cui non entrambe devono essere caricati, vorrei fare qualcosa di simile:

<script type="text/javascript" src="http://script1+2.js"></script> 
<script type="text/javascript"> 
    if(b_condition) { 
     functionA(); 
    } 
    else { 
     functionB(); 
    } 
</script> 
+0

gli script sono esterni al mio dominio e non ho accesso ad essi. sono entità separate – Shafique

+0

@Shafique: Oh ok allora ... –

3

Si potrebbe fare qualcosa di simile:

var file=document.createElement('script') 
file.setAttribute("type","text/javascript") 
file.setAttribute("src", "script1.js") 

dimenticato di aggiungere che è necessario quindi aggiungere questo in un elemento della pagina:

document.getElementsByTagName("head")[0].appendChild(file) 
0

Questi file script1.js e script2.js sono tuoi o li stai includendo da un altro dominio?

perché se sono tuoi vostro grado di includere sia, e dipende della vostra condizione è possibile chiamare le funzioni all'interno dei file ..

+0

non sono i miei file e non vivono sul mio dominio – Shafique

+0

Quindi, la soluzione migliore è quella di Ryan McGrath! –

0

Questo è di solito una cattiva idea quindi vi consiglio che ci dite che cosa avete veramente bisogno di facciamo in modo che possiamo trovare una soluzione migliore per te. In generale ti piacerebbe combinare e minimizzare tutti i javascript necessari sulla pagina in modo che l'utente debba caricarlo solo una volta.

Se non c'è altro modo che si può fare in questo modo:

<script type="text/javascript"> 
    var script = document.createElement('script'); 
    if((b_condition){ 
     script.src = 'script1.js'; 
    }else{ 
     script.src = 'script1.js'; 
    } 
    document.body.appendChild(script); 
</script> 
12

Che diavolo? Perché mai qui tutti stanno difendendo document.write()? Abbastanza certo, ci siamo spostati oltre questo come pratica standard a questo punto; document.write non è nemmeno valido se ti trovi in ​​un'impostazione XHTML.

Il modo migliore per fare questo sarebbe qualcosa di simile alla seguente (anche qui, per una migliore evidenziazione/parsing: https://gist.github.com/767131):

/* Since script loading is dynamic/async, we take 
    a callback function with our loadScript call 
    that executes once the script is done downloading/parsing 
    on the page. 
*/ 
var loadScript = function(src, callbackfn) { 
    var newScript = document.createElement("script"); 
    newScript.type = "text/javascript"; 
    newScript.setAttribute("async", "true"); 
    newScript.setAttribute("src", src); 

    if(newScript.readyState) { 
     newScript.onreadystatechange = function() { 
      if(/loaded|complete/.test(newScript.readyState)) callbackfn(); 
     } 
    } else { 
     newScript.addEventListener("load", callbackfn, false); 
    } 

    document.documentElement.firstChild.appendChild(newScript); 
} 

if(a) { 
    loadScript("lulz.js", function() { ... }); 
} else { 
    loadScript("other_lulz.js", function() { ... }); 
} 

Se si dispone di jQuery o una libreria simile sulla pagina, è possibile disconnetti la mia funzione loadScript e inserisco la loro funzione appropriata (ala $ .getScript, ecc.).

+0

Grazie Ryan questo codice funziona davvero per me. Ho perso 1 settimana per questo problema. – AndyBoy

+0

@RyanMcGrath Ottimo lavoro grazie – user7791702

1

ho usato questo e funziona bene:

<script type="text/javascript"> 
if(b_condition) 
    document.write('<scri'+'pt src="http://script1.js"></'+'script>'); 
else 
    document.write('<scri'+'pt src="http://scripts2.js"></'+'script>'); 
</script> 

vedo che document.write non è la pratica migliore da usare, però, ma funziona. Qualche idea migliore di questa? Non voglio scrivere tanto codice per qualcosa di così semplice.

+0

molto intelligente, non ci ho pensato. – Stardust

-2
<?php if (a_condition) {?> 
put html code here or script or whatever you like 
<?php } elseif(b_condition) {?> 
put any other code here 
<?php } else {?> 
put even more code 
<?php } ?> 
0
<script type="text/javascript">  
    if(condition==true) 
    { 
     var src = "js/testing_true.js"; 
     var newScript = document.createElement("script"); 
     newScript.type = "text/javascript"; 
     newScript.setAttribute("async", "true"); 
     newScript.setAttribute("src", src); 
     document.body.appendChild(newScript); 
    }else 
    { 

     var src = "js/testing_false.js"; 
     var newScript = document.createElement("script"); 
     newScript.type = "text/javascript"; 
     newScript.setAttribute("async", "true"); 
     newScript.setAttribute("src", src); 
     document.body.appendChild(newScript); 
    } 
</script> 
Problemi correlati