2014-01-20 237 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