Div隐藏JQuery后不显示

时间:2013-07-20 16:30:26

标签: javascript jquery html

在身体onload中隐藏div后,我似乎无法显示div。这应该很容易修复,我似乎无法弄明白。

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>

hide_buttons()功能在accounts.js这里

function hide_buttons() {
    $('#aubd').hide();      
}

然后我想在调用持有此函数的admin.js时重新出现div

$(document).ready(function() {
    $('#aubd').show();
});

此处的总体目标是检查用户是否具有“admin”角色,并根据此检查隐藏或显示其中包含的div和按钮。那么我做错了什么?这也是正确的方法,还是我应该使用AJAX

3 个答案:

答案 0 :(得分:5)

onload事件在页面加载周期的后期非常发生。 jQuery的ready回调发生得更早(通常)。所以正在发生的事情是show来电正在hide来电之前发生。

最好的解决方法是不使用onload。相反,只输出隐藏的div:

<div id="aubd" style="display: none">....

或者在CSS中:

#aubd {
    display: none;
}

然后你的ready处理程序会很好地显示它。


如果您无法更改onload,则可以更改admin.js,以便稍后调用show

$(window).load(function() {
    setTimeout(function() {
        $('#aubd').show();
    }, 0);
});

具有非常非常短的超时值的setTimeout可以避免使用load事件处理程序的竞争条件。 (jQuery通过addEventListener / attachEvent挂钩处理程序。有些浏览器首先触发onload处理程序,然后触发addEventListener / attachEvent处理程序。其他浏览器执行此操作反过来说。)但同样,最好通过首先隐藏div来完全避免这种情况。

答案 1 :(得分:2)

你可以把show语句放在window.load而不是DOM就绪,以便在加载admin.js后执行它

$(window).load(function() {
    $('#aubd').show();
});

正如T.J. Crowder指出的那样,使用setTimeout可以避免事件中的竞争条件。

$(window).load(function() {
    setTimeout(function() {
        $('#aubd').show();
    }, 1);
});

答案 2 :(得分:1)

我的建议,可能会解决你的问题,就是把它隐藏在CSS中。

使用#aubd {display:none;}然后在页面加载时隐藏元素,避免有时显示并隐藏闪烁。

这解决了它,我认为这是一种更好的编码方式。答案“为什么”它不起作用我认为T.J. Crowder回答了。