2012-05-12 162 views
0
<script type="text/javascript"> 
     if (SOMECONDITION) { 
      $("#scriptD").attr("src", "../../Scripts/A.js"); 
     } else { 
      $("#scriptD").attr("src", "../../Scripts/B.js"); 
     } 

</script> 

<script id="scriptD" src="" type="text/javascript"></script> 

我试图动态地插入.js文件(基于条件)。但是这不起作用。有人可以告诉我这里有什么问题吗?Jquery这是正确的方法吗?

+0

路径问题,也许呢? – Simone

+0

你的错误控制台显示你什么? –

+0

脚本未运行 – gaurav

回答

3

一种方式做你正在尝试使用$.getScript()

if (SOMECONDITION) { 
    $.getScript("a.js"); 
} else { 
    $.getScritp("b.js"); 
} 

再说,你的方法将工作,如果你把这个脚本的<script>元素

<script id="scriptD" src="" type="text/javascript"></script> 
<script type="text/javascript"> 

    if (SOMECONDITION) { 
     $("#scriptD").attr("src", "../../Scripts/A.js"); 
    } else { 
     $("#scriptD").attr("src", "../../Scripts/B.js"); 
    } 

</script> 

这之后是因为当在元素之前调用该脚本时,该脚本将无法在DOM上找到scriptD

+1

更短;)'SOMECONDITION? $ .getScript(“a.js”):$ .getScript(“b.js”);' –

+0

@yaponyal,绝对的,甚至更短的是'.getScript((SOMECONDITION)?'a.js':'b .js');'(UNTESTED)他他 – Starx

1

它看起来像你解析和执行脚本存在于DOM前<script id='scriptD'>。执行$(document).ready()上的功能或重新排列它,以便脚本标记在执行前存在。

<script type="text/javascript"> 
     $(document).ready(function() { 
     if (SOMECONDITION) { 
      $("#scriptD").attr("src", "../../Scripts/A.js"); 
     } else { 
      $("#scriptD").attr("src", "../../Scripts/B.js"); 
     } 
     }); 

</script> 
<script id="scriptD" src="" type="text/javascript"></script> 
0

你可能想试试这个:

<script type="text/javascript" id="scriptD" src=""></script> 

<script type="text/javascript"> 
    (function() { 
     if (SOMECONDITION) { 
      $("#scriptD").attr("src", "../../Scripts/A.js"); 
     } else { 
      $("#scriptD").attr("src", "../../Scripts/B.js"); 
     } 
    })(); 
</script> 

要的改变src必须存在,在进行任何更改其属性的脚本。 或者你可能想尝试这种方式 - 没有空的src脚本:

<script type="text/javascript"> 
    (function() { 
     var script = document.createElement("script"); 
     script.setAttribute("type", "text/javascript"); 
     script.setAttribute("src", "../../Scripts/" + (SOMECONDITION ? "A" : "B") + ".js"); 

     document.getElementByTagName(head)[0].appendChild(script); 
    })(); 
</script>