JavaScript IF / ELSE для вызова другого скрипта JS? - PullRequest
7 голосов
/ 06 января 2011

Мне нужно вызвать один из двух скриптов JavaScripts в зависимости от условия, например:

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

Но это не работает. Любые идеи, как вызвать другой вызов JavaScript в блоке If / Else?

Ответы [ 10 ]

14 голосов
/ 06 января 2011

Какого черта?С какой стати все здесь выступают за document.write ()?Совершенно уверен, что к этому моменту мы вышли за рамки стандартной практики;document.write даже недействителен, если вы находитесь в настройке XHTML.

Лучшим способом сделать это было бы что-то вроде следующего (также здесь, для лучшего выделения / разбора: 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() { ... });
}

Если на странице есть jQuery или подобная библиотека, вы можете отключить мою функцию loadScript и вставить соответствующую функцию (ala $ .getScript и т. Д.).

3 голосов
/ 06 января 2011

Вы можете сделать что-то вроде этого:

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

Забыл добавить, что вам нужно добавить это в элемент на странице:

document.getElementsByTagName("head")[0].appendChild(file)
1 голос
/ 06 января 2011

Я использовал это, и оно хорошо работает:

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

Я вижу, что document.write не лучший способ для использования, но он работает.Есть идеи лучше, чем эта?Я не хочу писать так много кода для чего-то такого простого.

0 голосов
/ 25 июля 2017
   <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>
0 голосов
/ 26 марта 2013
<?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 голосов
/ 06 января 2011

Обычно это плохая идея, поэтому я рекомендую вам сообщить нам, что вам действительно нужно сделать, чтобы мы могли найти лучшее решение для вас. В общем, вы хотели бы объединить и минимизировать весь необходимый JavaScript на странице, чтобы пользователь мог загрузить его только один раз.

Если нет другого способа, как вы можете сделать это так:

<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>
0 голосов
/ 06 января 2011

Эти файлы script1.js и script2.js являются вашими или вы включаете их из другого домена?

потому что, если они ваши, вы можете включать и то, и другое, и в зависимости от вашего состояния вы можете вызывать функции внутри файлов ..

0 голосов
/ 06 января 2011

Вам необходимо либо выдать нужный блок script в своем состоянии, либо создать тег script с помощью DOM и вставить его.http://ajaxpatterns.org/On-Demand_Javascript

0 голосов
/ 06 января 2011

Если скрипты не очень большие и / или нет другой причины, по которой не нужно загружать оба, я бы сделал что-то вроде:

<script type="text/javascript" src="http://script1+2.js"></script>
<script type="text/javascript">
    if(b_condition) {
        functionA();
    } 
    else {
        functionB();
    }
</script>
0 голосов
/ 06 января 2011
<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...