2013-08-27 326 views
0

我在URL中有一个名为$cat(代表'category')的变量。交换jquerymobile的样式表,带链接

取决于它是否是“A”或“B”我使用一个链接交换样式表:

<?php 
if($cat == "a") { ?> 
    <link rel="stylesheet" href="/css/styleA.css"> 
<?php } 
elseif($cat == "b") { ?> 
    <link rel="stylesheet" href="/css/styleB.css"> 
<?php } ?> 

styleA.css使头蓝色的background-color,并styleB.css使得红

<div id="header" data-role="header" data-position='fixed'>...</div>

如果我点击一个链接,看起来像这样的:

<a href="index.php?cat=a">Click for red</a> 
<a href="index.php?cat=b">Click for blue</a> 

该URL实际上起作用(内容被包含取决于$ cat),并且我得到$ cat的值,但样式表似乎没有交换,因为颜色没有改变。但是,如果我重新加载页面(使用前面链接给出的URL)样式表交换和一切正常工作。

我对我正在使用的网站的桌面版本使用了相同的方法,并且一切正常。 这个问题似乎只会出现,如果我使用jQuery的手机。

有没有人看到为什么这不工作,因为它应该?

编辑(添加HTML): 这是相当多了,但这里是它的其余部分:

headpart:

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
<meta name="apple-mobile-web-app-capable" content="yes"> 
<meta name="apple-mobile-web-app-status-bar-style" content="black"> 
<title></title> 
<link rel="stylesheet" href="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.css"> 
<!-- Extra Codiqa features --> 
<link rel="stylesheet" href="/css/codiqa.ext.css"> 
<link rel="stylesheet" href="/css/style.css"> 
<?php if($cat == "a") { ?> <link rel="stylesheet" href="/css/styleASS.css"> <?php } 
     if($cat == "b") { ?> <link rel="stylesheet" href="/css/styleBB.css"> <?php } 
?> 
<!-- jQuery and jQuery Mobile --> 
<script src="https://d10ajoocuyu32n.cloudfront.net/jquery-1.9.1.min.js"></script> 
<script src="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script> 
<!-- Extra Codiqa features --> 
<script src="https://d10ajoocuyu32n.cloudfront.net/codiqa.ext.js"></script> 
</head> 


<div data-role="page" id="page"> 
    <div id="panel_menu" data-role="panel" data-display="overlay"> 
     <ul data-role="listview"> 
      <li role="heading">Navigation</li> 
      <li><a href="#">Home</a></li> 
      <li><a href="#">Products</a></li> 
      <li><a href="#">Service</a></li> 
      <li><a href="#">Contact</a></li> 
      <li><a href="#">Login</a></li> 
     </ul> 
    </div> 
    <div id="header" data-role="header" data-position='fixed'> 
     <h1>Header</h1> 
     <a href="#panel_menu">Menu</a> 
    </div> 
    <div data-role="content"> 

    <?php include "$menu_page_content";?> 

    <a href="?cat=a&lang=en&menu=home">a</a> 
     <a href="?cat=b&lang=en&menu=home">b</a> 

    </div> 
    <div data-role="footer" data-position="fixed" data-theme="d"> 
     <div data-role="navbar" class="ui-icon-nodisc"> 
      <ul> 
      <li><a href="#" id='language' data-icon='custom'>Change Language</a></li> 
      <li><a href="#" id='category' data-icon="custom" >Change Category</a></li> 
      <li><a href="#" id='contact' data-icon="custom" >Contact</a></li> 
      </ul> 
     </div> 
    </div> 
</div><!-- page --> 

EDITIT: 其上传到一个免费的主机托管服务提供商:here 你可以点击内容区域中的某个链接,也可以点击页脚区域中的“类别”。点击&重新加载页面。

回答

1

如果任何SO链接你的大部分风格都与颜色的例外相同,我建议将它们放在单一样式表中,并在课程中写入身体。

对于实例

.header { 
     /* general header styles margins paddings and whatnot */ 
} 

.cat-a .header { 
     background-color: red; 
} 
.cat-b .header { 
     background-color: blue; 
} 

然后可变写类在身体

<body class='cat-<?php echo $cat; ?>'> 
1

它必须取决于数据在您使用的浏览器上的缓存方式。

几种解决方案是可能的。

您不能交换CSS样式表,但使用PhP或Javascript添加样式属性。这样你会100%确定它会改变。 (只要用户使用JavaScript,PhP会使它真的100%确定)

或者强制浏览器每次都重新加载CSS表单,但它不是一个带宽友好的解决方案,我不会推荐这样做。


如果你想用它来保存用户的选择和重新加载正确的背景每次,给看看这个: http://www.dynamicdrive.com/forums/archive/index.php/t-44389.html

没有找到虽然

+0

我不认为这取决于我使用的设备上,因为我在这个问题上我使用的所有设备(IE,FF,GC,iPhone/Pod/Pad,HTC One,...)。当然你是对的,我可能只是使用JS,但我想了解为什么这不与PHP工作 – dabe

+0

设备并不真正意味着对不起。它更多的是关于浏览器。而且大多数浏览器在不重新加载样式表的情况下都具有相同的行为。我认为移动浏览器试图下载它的次数更少,因为可用带宽并不相同。 – Sugar

+0

这个问题出现在我能够测试的每个浏览器中的每个设备上,另外我在这个网站的桌面版本上使用完全相同的方法,并且它似乎在那里完美地工作。编辑:桌面版本也适用于每个移动设备(到目前为止) – dabe