Je dois appeler l'un des deux javascripts en fonction d'une condition, comme: mais cela ne fonctionne pas. Des idées Comment appeler un autre appel JavaScript dans un bloc IF / SLA? P> P>
10 Réponses :
<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>
Veuillez ne pas préconiser le document.write (), il s'agit d'une pratique horrible pour la performance, car elle bloque tout le reste tout en exécutant.
Comme on le voit ici ( Stackoverflow.com/questions/802854/... ) Il semble que son accord d'utiliser Document.Write dans des cas extrêmement simples comme mon exemple. être en désaccord?
Si les scripts ne sont pas énormes et / ou il n'y a pas d'autre raison pour laquelle les deux ne devraient pas être chargés, je ferais quelque chose comme:
Les scripts sont externes à mon domaine et je ne leur ai pas accès. Ce sont des entités séparées
Vous pouvez faire quelque chose comme ceci:
document.getElementsByTagName("head")[0].appendChild(file)
Vous devez émettre l'édition du bloc de script code> souhaité code> dans votre état ou créez la balise script code> à l'aide de la DOM et insérez-la. http://ajaxpatterns.org/on-demand_javascript p>
ces fichiers script1.js et script2.js sont votre ou êtes-vous inclus dans eux d'un autre domaine? P>
Parce que si vous êtes à vous, vous pouvez inclure les deux et dépend de votre condition que vous pouvez appeler des fonctions à l'intérieur des fichiers. P>
ce ne sont pas mes fichiers et ne vivent pas sur mon domaine
Donc, la meilleure solution à partir de Ryan McGrath!
C'est généralement une mauvaise idée, je vous recommande donc de nous dire ce que vous devez réellement faire afin que nous puissions trouver une meilleure solution pour vous. En général, vous souhaitez combiner et minifier tout JavaScript sur la page afin que l'utilisateur ne doive la charger qu'une seule fois.
S'il n'y a pas d'autre manière que vous pouvez le faire comme ceci: P>
<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>
Qu'est-ce que diable? Pourquoi sur Terre est-ce que tout le monde est ici préconisant le document.write ()? Assez certain que nous avons dépassé cela comme pratique standard par ce point; document.write n'est même pas valide si vous êtes dans un paramètre XHTML.
La meilleure façon de le faire serait comme suit (aussi ici, pour une meilleure mise en évidence / analyse: Httptps://gist.github.com/767131 ): p>
/* 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() { ... });
}
J'ai utilisé cela et ça fonctionne bien:
<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>
Très intelligent, je ne pensais pas à ça.
<?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 } ?>
<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>
Créer un élément de script