Javascript 隐藏JQuery后未显示Div
在主体中使div在Javascript 隐藏JQuery后未显示Div,javascript,jquery,html,Javascript,Jquery,Html,在主体中使div在onload中不可见之后,我似乎无法使其出现。这应该很容易解决,我就是想不出来 PHP <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <?p
onload
中不可见之后,我似乎无法使其出现。这应该很容易解决,我就是想不出来
PHP
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php include '/include/init.php'; ?>
<script type="text/javascript" src="/js/jqeury.js"> </script>
<script type="text/javascript" src="/js/accounts.js"> </script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="/css/style.css" />
<title>Accounts</title>
</head>
<body onload="hide_buttons()">
<div class="accounts_headerDiv">
<div class="ahd_left">
<img src="/images/launcher2.png" class="accounts_logo"/>
<p class="title_para"> Accounts </p>
</div>
<div class="ahd_right">
<div class="searchDiv">
<p class="searchPara"> Search </p>
<input type="text" id="search_input" placeholder="search" class="search_input"/>
<img src="/images/search_icon.png" class="search_icon"/>
</div>
<div class="userDiv">
<a href="#"><img src="/images/default-portrait-icon.jpg" align="right" class="user_picture" /> </a>
<p class="userInfo"><?php username($db);?></p>
<a href="/functions/logout.php"> Log out </a>
</div>
<div class="adminUserButtonsDiv" id="aubd">
<input id="createUser" name="createUser" value="Create" type="button" class="admin_button">
<br />
<input id="editUser" name="editUser" value="Edit" type="button" class="admin_button">
</div>
</div>
</div>
<hr />
<?php if (is_admin($db) === 'true') { ?>
<script type="text/javascript" src="/js/admin.js"> </script>
<?php } ?>
</body>
</html>
然后我想在调用包含此函数的admin.js时使div重新出现
$(document).ready(function() {
$('#aubd').show();
});
这里的总体目标是检查用户是否具有“admin”角色,并根据此检查隐藏或显示其中包含的div和按钮。那么我做错了什么?这也是正确的方法吗?还是我应该使用
AJAX
来实现这一点?在页面加载周期中,onload
事件发生得很晚。jQuery的ready
回调发生得更早(通常)。所以现在发生的是,您的show
调用发生在您的hide
调用之前
最好的解决方法是不要使用onload
。相反,只需输出隐藏的div:
<div id="aubd" style="display: none">....
然后您的ready
处理程序将很好地显示它
如果无法更改
onload
,则可以更改admin.js
,以便稍后调用show
:
$(window).load(function() {
setTimeout(function() {
$('#aubd').show();
}, 0);
});
带有非常非常短超时值的
setTimeout
用于避免与load
事件处理程序的争用情况。(jQuery通过addEventListener
/attachEvent
钩住处理程序。一些浏览器首先启动onload
处理程序,然后启动addEventListener
/attachEvent
处理程序。其他浏览器则相反。),最好首先以不同的方式隐藏div,从而完全避免这种情况。您可以将show语句放在window.load中,而不是DOM ready中,以便在加载admin.js后执行
$(window).load(function() {
$('#aubd').show();
});
正如所指出的,使用setTimeout可以避免事件中存在争用条件
$(window).load(function() {
setTimeout(function() {
$('#aubd').show();
}, 1);
});
我的建议是,将它隐藏在CSS中,这可能会解决您的问题 使用
#aubd{display:none;}
则在加载页面时元素已经隐藏,避免有时显示和隐藏闪烁
这修复了它,我认为这是一种更好的编码方式。“为什么”这个答案不起作用,我想已经回答了。你能确认hide_buttons()确实被调用了吗?顺便说一句,为什么不从一开始就在CSS中隐藏div呢?@josh是的,它的作用我同意@sergio大多数人在页面加载时都会使用style=“display:none;”。否则,您将看到元素快速闪烁,然后隐藏。加载脚本呈现DOM,然后执行JavaScript隐藏元素。感谢大家的帮助,为什么不(function(){$('aubd').show();})或direct$('aubd').show()@Ankit:在解析页面的过程中,当到达
admin.js
脚本时,它会立即被调用,甚至早于jQueryready
回调,因此它会遇到与jQueryready
回调相同的问题。谢谢先生。我会尽快接受。你认为这是正确的方法吗?我对JQuery相当陌生。所以我想早点养成好习惯。或者我应该使用css隐藏这个,然后只进行一次JQuery调用吗?@I_me_mine:“或者我应该使用css隐藏这个,然后只进行一次JQuery调用吗?”这就是我要做的,是的。函数在onload上运行而不是在解析过程中,如果我做了什么错误,请告诉我问题是您有竞争条件。浏览器是先启动onload
,还是先启动通过addEventListener
/attachEvent
(jQuery使用的)钩住的处理程序?答案是:这取决于浏览器。所以我不建议忽略比赛条件。谢谢@T.J.Crowder指出这种情况,你的答案中设置超时是为了避免这种情况吗?@adil:是的,没错,尽管我的主要答案是“不要使用onload
在第一个位置隐藏div”。-)(改用内联样式或CSS。)然后ready
处理程序就可以正常工作了。
$(window).load(function() {
$('#aubd').show();
});
$(window).load(function() {
setTimeout(function() {
$('#aubd').show();
}, 1);
});