2011-01-05 2 views
5

tôi cần phải gọi một trong hai JavaScripts tùy thuộc vào một điều kiện, như vậy:JavaScript IF/ELSE để gọi một JS Script khác?

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

Nhưng công việc doesnt này. Bất kỳ ý tưởng nào về cách gọi một cuộc gọi JavaScript khác trong khối If/Else?

+0

Tạo một yếu tố kịch bản – Stardust

Trả lời

-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

Xin đừng ủng hộ document.write() nữa, đây là một thực tế khủng khiếp cho hiệu suất vì nó ngăn chặn mọi thứ khác trong khi thực hiện. –

+0

Ryan, cảm ơn vì đã chỉ ra điều này! – alexwen

+0

như đã thấy ở đây (http: // stackoverflow.com/questions/802854/why-is-document-write-coi-a-bad-practice) có vẻ như không sao khi sử dụng document.write trong các trường hợp cực kỳ đơn giản như ví dụ của tôi. không đồng ý? – Shafique

0

Nếu kịch bản không phải là rất lớn và/hoặc không có lý do nào khác không sao cả nên được nạp, tôi sẽ làm một cái gì đó như:

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

các tập lệnh nằm ngoài miền của tôi và tôi không có quyền truy cập vào chúng. họ là những thực thể riêng biệt – Shafique

+0

@ Shafique: Oh ok sau đó ... –

3

Bạn có thể làm một cái gì đó như thế này:

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

Quên để thêm rằng bạn cần phải sau đó nối này thành một yếu tố trên trang:

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

Những tệp đó script1.js và script2.js là của bạn hoặc bạn có bao gồm chúng từ một miền khác không?

bởi vì nếu họ thuộc về Cha của bạn có thể bao gồm cả hai, và phụ thuộc tình trạng của bạn, bạn có thể gọi chức năng bên trong các tập tin ..

+0

chúng không phải là tệp của tôi và không tồn tại trên miền của tôi – Shafique

+0

Vì vậy, giải pháp tốt nhất từ ​​Ryan McGrath! –

0

Đây thường là một ý tưởng tồi vì vậy tôi khuyên bạn nên cho chúng tôi biết những gì bạn thực sự cần phải làm như vậy chúng tôi có thể tìm ra giải pháp tốt hơn cho bạn. Nói chung, bạn muốn kết hợp và rút gọn tất cả javascript cần thiết trên trang để người dùng chỉ phải tải nó một lần.

Nếu không có cách nào khác hơn là bạn có thể làm điều đó như thế này:

<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

Cái quái gì? Tại sao trên trái đất là tất cả mọi người ở đây ủng hộ document.write()? Khá chắc chắn chúng tôi đã vượt qua điều này như là thực hành tiêu chuẩn vào thời điểm này; document.write thậm chí không hợp lệ nếu bạn đang ở trong một thiết lập XHTML.

Cách tốt nhất để làm điều này sẽ là một cái gì đó như sau (cũng ở đây, cho tốt hơn làm nổi bật/phân tích cú pháp: 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() { ... }); 
} 

Nếu bạn có jQuery hoặc một thư viện tương tự trên trang web, bạn có thể jack ra chức năng loadScript của tôi và chèn chức năng thích hợp của họ (ala $ .getScript, vv).

+0

Cảm ơn Ryan mã này thực sự làm việc cho tôi. Tôi đã lãng phí 1 tuần cho vấn đề này. – AndyBoy

+0

@RyanMcGrath Làm việc nhờ tuyệt vời – user7791702

1

tôi đã sử dụng này và nó hoạt động tốt:

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

tôi thấy document.write đó không phải là cách tốt nhất để sử dụng mặc dù, nhưng nó hoạt động. Bất kỳ ý tưởng nào tốt hơn điều này? Tôi không muốn viết nhiều mã cho một thứ đơn giản đến thế.

+0

rất thông minh, tôi không nghĩ về điều đó. – 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>