2014-01-20 249 views
-2

基本上,我想要做的是在用戶從選擇框中選擇一個選項時更改樣式表。要做到這一點,會有一個名爲$ _SESSION ['style']的變量。從選擇框中單擊時更改變量的最佳方法是什麼? (無需點擊提交按鈕)。是否有可能在不重新加載整個頁面的情況下更改樣式表?從選擇框中選擇選項時更改PHP變量

Thanksss! :)

+1

PHP是一種服務器端語言,所以如果您希望在使用選擇框(立即)時真正改變它,請使用Javascript。這是一個SO解決方案:http://stackoverflow.com/questions/14292997/changing-style-sheet-javascript –

回答

0

是的,你可以動態注入一個CSS文件,當選擇框更新。

<select onchange="changecss(this.value);"> 
... 
</select> 

<script> 
function changecss(value){ 
    //based on the value, pick a style sheet here 
    var cssname='pick your own css file'; 

    csl=document.createElement('link'); 
    csl.setAttribute('rel','stylesheet'); 
    csl.setAttribute('type','text/css'); 
    csl.setAttribute('href',cssname); 
    document.getElementsByTagName("head").item(0).appendChild(csl); 

} 
</script> 

編輯:

我見過的代碼,直接改變當前的CSS列入src值。這在IE的某些版本中不起作用,因爲瀏覽器沒有「通知」DOM更改,因此您的頁面不受影響。在DOM中插入新的CSS節點的工作更可靠。

有了這個Ajax wrapper可以動態加載CSS文件中的一行:

<script src="http://www.antradar.com/nano.js"></script> 
<script> 
ajxcss(self.cssloader,'newcss.css'); 
</script> 
0

由於PHP是不能在用戶的瀏覽器(沒有「推」)更新數據的服務器端語言,你需要客戶端腳本來更改樣式表,而不必重新加載頁面。使用javascript可以更改樣式表。因爲你的樣式表文件名存儲在(服務器端)會話變量,你有2種選擇:

  • 渲染的文件名進入該網站(例如,通過呼應成JavaScript代碼的變量),所以它可以被客戶端腳本使用。
  • 使用來自客戶端腳本的ajax調用,從輸出會話變量的PHP腳本(「pull」)獲取文件名。

但是,這可能是太多的開銷*。也許你應該考慮將樣式表文件名硬編碼到javascript中。

*)如果你正在使用像jQuery或MooTools的這樣的事情一個JavaScript框架,可以很容易地實現......


編輯:我剛剛認識到,你有項目的選擇框。在這種情況下,您肯定希望使用第一個選項:通過PHP創建選擇框,例如使用樣式表的文件名作爲值。當發生onSelectedIndexChanged時,您可以使用javascript更改樣式表。

+0

我很抱歉,我沒有說我的問題中使用javaScript的任何內容,但這實際上是這個想法。我在javaScript中很新,所以我很迷茫。我一直在閱讀很多關於這個問題的人的問題,我只是不知道從哪裏開始(似乎沒有什麼對我有用!) – Laia

+0

@Laia您是否使用JavaScript框架?這可以幫助您更輕鬆地開始,因爲您不必爲不同的瀏覽器解釋代碼而苦惱。 – mvo