2013-07-04 48 views
-2

這是失敗的,但我不知道如何使它工作。使用document.write在PHP中編寫JS

我有一個PHP數組:

$swipe_list = array('customers.html', 'index.html', 'atr_backplane.html'); 

這是要知道有哪些網頁轉盤和需要觸摸的支持。

所以我檢查在PHP的頁面,如果列出的JS將檢查其觸摸設備,並寫入附加js移動文件。

是否因爲服務器腳本在js可以在客戶端檢測到之前運行?

<?php 
if(in_array($selected, $swipe_list)){ ?> 
<script type="text/javascript"> 

function isTouchDevice(){ document.write('<script type="text/javascript" src="js/jquery.mobile.custom.min.js"></script>') 
} 

</script>    
<?php }?> 
<?php if(!in_array($selected, $exclude_list)){  
print '<script type="text/javascript" src="js/camera.js"></script>'; 
} 
?> 
+0

你會得到什麼錯誤? – putvande

+0

你永遠不應該從PHP生成JS,一個運行在服務器上,另一個運行在客戶端上。分離問題,讓PHP創建一個由JS使用的JSON對象,以最大限度地減少耦合...它將真正簡化代碼的調試和維護 –

回答

1

當您在頁面加載後使用document.write時,可能會發生各種不好的事情。我不記得確切的原因,但我知道它以某種方式破壞了DOM。

的最好的事情是動態包括腳本沒有打破DOM使用這樣的事情,而不是:

function isTouchDevice(){ 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'js/jquery.mobile.custom.min.js'; 
    document.getElementsByTagName('head')[0].appendChild(script); 
} 

這將創建腳本元素,並將其添加到文檔的頭部。

+0

但是,這仍然會在每個觸摸設備上包含jquery.mobile.custom.min .js爲每個頁面並忽略php數組?我不想包含該文件,除非它被一個觸摸設備用於具有所需元素的頁面 - 保存開銷 – Razzor

+0

在這種情況下,您可以將代碼放在函數外面,並用PHP in_array'碼。您可能實際上需要等待文檔完全加載,然後才能將腳本添加到頭部,因此可能將此代碼放在文件的末尾,或者將其封裝在'window.onload = function(){... }'在文檔中的任意位置。 –

+0

我會試試! – Razzor

1

在這裏你的問題所在,我想:

function isTouchDevice(){ document.write('<script type="text/javascript" src="js/jquery.mobile.custom.min.js"></script>') 
} 

有許多的原因,這行不執行任何操作。

一,功能isTouchDevice定義,然後從不叫(至少不會在你的例子)

其次,它加載後寫入文本文件是不加載外部腳本的可行方法。

從我收集,要做到這一點: (這也是蠻好用的php的printecho功能的腳本標籤打印到文件,如果你不喜歡這條路線)

<?php 
if(in_array($selected, $swipe_list)) 
{ 
?> 

    <script type="text/javascript" src="js/jquery.mobile.custom.min.js"></script> 

<?php 
} 

if(!in_array($selected, $exclude_list)) 
{ 

?> 

    <script type="text/javascript" src="js/camera.js"></script> 

<?php 
} 
?> 
0

不知道你的問題是列入js文件,但我認爲,如果你只是刪除文件撰寫的,包括你的腳本那麼它應該工作:

<?php 
if(in_array($selected, $swipe_list)){ ?> 

    <script type="text/javascript" src="js/jquery.mobile.custom.min.js"></script> 
<?php 
} 

if(!in_array($selected, $exclude_list)){  
?> 
    <script type="text/javascript" src="js/camera.js"></script> 
<?php 
} 
?> 

嘗試一下:)