2012-05-12 250 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>