2011-01-05 17 views
5

Tengo que llamar a uno de los dos archivos JavaScript dependiendo de una condición, así:JavaScript IF/ELSE para llamar a otro 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> 

Pero esto no funciona. ¿Alguna idea de cómo llamar a otra llamada de JavaScript en un bloque If/Else?

+0

Crear un elemento de script – Stardust

Respuesta

-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

Por favor, no abogar document.write() nunca más, esta es una práctica horrible para el rendimiento, ya que bloquea todo lo demás durante la ejecución. –

+0

Ryan, ¡gracias por señalar esto! – alexwen

+0

como se ve aquí (http: // stackoverflow.com/questions/802854/why-is-document-write-considered-a-bad-practice) parece que está bien usar document.write en casos extremadamente simples como mi ejemplo. ¿discrepar? – Shafique

0

Si los scripts no son enormes y/o no hay otra razón por qué no ambos deben ser cargados, me gustaría hacer algo como:

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

las secuencias de comandos son externas a mi dominio y no tengo acceso a ellas. son entidades separadas – Shafique

+0

@Shafique: Oh, entonces bien ... –

3

Se podría hacer algo como esto:

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

olvidó añadir que es necesario agregar entonces esto en un elemento de la página:

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

Esos archivos script1.js y script2.js son suyos, o los están incluyendo de otro dominio?

porque si ellos son los suyos su puede incluir ambos, y depende de su condición puede llamar a funciones dentro de los archivos ..

+0

no son mis archivos y no viven en mi dominio – Shafique

+0

¡Así que la mejor solución es de Ryan McGrath! –

0

Esto suele ser una mala idea, así que recomiendo que nos dice lo que realmente se necesita para hazlo para que podamos encontrar una mejor solución para ti. En general, le gustaría combinar y minimizar todos los javascript necesarios en la página para que el usuario solo tenga que cargarlos una vez.

Si no hay otra manera que usted puede hacerlo de esta manera:

<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

¿Qué demonios? ¿Por qué diablos todos están defendiendo document.write()? Bastante cierto que hemos avanzado más allá de esto como práctica estándar en este punto; document.write ni siquiera es válido si estás en una configuración XHTML.

La mejor manera de hacer esto sería algo así como lo siguiente (también aquí, para una mejor resaltado/análisis: 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() { ... }); 
} 

Si tiene jQuery o una biblioteca similar en la página, se puede desconecte mi función loadScript e inserte su función apropiada (ala $ .getScript, etc.).

+0

Gracias Ryan, este código realmente funciona para mí. Perdí 1 semana por este problema. – AndyBoy

+0

@RyanMcGrath Trabajando increíble gracias – user7791702

1

He utilizado este y funciona así:

<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> 

veo que document.write no es la mejor práctica utilizar, sin embargo, pero funciona. ¿Alguna idea mejor que esto? No quiero escribir tanto código para algo tan simple.

+0

muy inteligente, no pensé en eso. – 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> 
Cuestiones relacionadas