【发布时间】:2013-10-11 17:57:27
【问题描述】:
我有一个响应式网站,当该网站位于其他导航链接旁边的“桌面”视图(屏幕可用宽度 > 768)中时,该网站有一个 simple drop-down login menu。当屏幕宽度低于 768 时,导航链接最终会出现在一个选择选项中。问题是下拉登录菜单在选择选项中不起作用。
当屏幕宽度小于 768 时,我想使用 PHP 将下拉登录菜单更改为简单的<a href> 链接。
现在我的页面中有<head>:
<?
$screenWidth = '<script type="text/javascript">document.write(screen.availWidth);</script>';
?>
在<body>:
<?
if($screenWidth <= "768") {
echo '<li><a href="login.php">Log in</a></li>';
} else {
?>
<div id="fancy">
<li id="login">
<a id="login-trigger" href="#">Log in <span>▼</span></a>
<div id="login-content">
<form>
<fieldset id="inputs">
<input id="username" type="email" name="Email" placeholder="Your email address" required>
<input id="password" type="password" name="Password" placeholder="Password" required>
</fieldset>
<fieldset id="actions">
<input type="submit" id="submit" value="Log in">
<label><input type="checkbox" checked="checked"> Keep me signed in</label>
</fieldset>
</form>
</div>
</li>
<? } ?>
在我的桌面上,我回显了 $screenWidth,它给出了 1920。因此,我希望显示“精美”的下拉登录菜单。 (确实如此)。
在我的手机上,$screenWidth 回显为 320。然后我希望显示 <a href> 链接。 (它不会 - 而是显示“精美”菜单)。
在正文中回显的变量会给出不同的数字似乎很奇怪,但在 if 语句中进行比较时,它不会改变输出。
有没有更好的方法来改变输出?
编辑:jquery 响应式菜单代码
jquery.responsivemenu.js:
(function($) {
$.fn.responsiveMenu = function(options) {
var defaults = {autoArrows: false}
var options = $.extend(defaults, options);
return this.each(function() {
var $this = $(this);
var $window = $(window);
var setClass = function() {
if ($window.width() > 768) {$this.addClass('dropdown').removeClass('accordion').find('li:has(ul)').removeClass('accorChild');}
else {$this.addClass('accordion').find('li:has(ul)').addClass('accorChild').parent().removeClass('dropdown');}
}
$window.resize(function() {
setClass();
$this.find('ul').css('display', 'none');
});
setClass();
$this
.addClass('responsive-menu')
.find('li.current a')
.live('click', function(e) {
var $a = $(this);
var container = $a.next('ul,div');
if ($this.hasClass('accordion') && container.length > 0) {
container.slideToggle();
return false;
}
})
.stop()
.siblings('ul').parent('li').addClass('hasChild');
if (options.autoArrows) {
$('.hasChild > a', $this)
.find('strong').append('<span class="arrow"> </span>');
}
});
}
})(jQuery);
【问题讨论】:
-
您是说
$screenWidth = '<script type="text/javascript">document.write(screen.availWidth);</script>';确实为您工作,通过为该变量分配一个数值? -
这很有帮助,但并不能真正解释为什么我可以使用 PHP 到
<? echo $screenWidth; ?>并获得没有问题的结果,但无法比较输出<? if ($screenWidth <= "768") { //something } else { //something else } ?> -
@scd1982 是的,屏幕宽度出现了,因为 JavaScript 被您的浏览器解析并包含在文档中。就 PHP 而言,
$screenWidth的类型为string(72)。 PHP 永远不会看到整数值,因为当您的浏览器看到网页时,PHP 已经完成了工作 -
你的 call 只显示数字,是因为浏览器没有显示它周围的脚本块。因此字符串(72)(72 个字符)。这就是为什么您的比较不起作用的原因。 $screenWidth 变量实际上是整个脚本块字符串。
标签: javascript php