如何重新排列javascript函数执行顺序(与包含顺序无关)。
一个有帮助但不能完全回答我的问题的问题:Can you have multiple $(document).ready(function() sections?(答案是肯定的,它们按照添加到jQuery.ready()的顺序执行。
为了方便通知,我试图在BBG ninjawars.net上使我的javascript登录/未登录意识。我希望使用一个简单的系统,使服务器php在登录页面时写出javascript函数调用setLoggedIn()
,并在退出页面时查看写出对clearLoggedIn()
的调用:
<head>
...
<!-- All the global ninjawars javascript, defines the setLoggedIn(), clearLoggedIn(), and modifyPageLayout() functions and (currently) calls modifyPageLayout() within jQuery.ready() -->
<script type="text/javascript" src="js/nw.js"></script>
{if $logged_in} // Server-side check.
<script type="text/javascript">
<!--
setLoggedIn();
// -->
</script>
{else} // Server-side check found that the user was not logged in.
<script type="text/javascript">
<!--
clearLoggedIn();
// -->
</script>
{/if}
</head>
问题:
当前,顺序为:
全局定义setLoggedIn()和clearLoggedIn()(在nw.js中)
添加页面/信息修改代码,将其称为modifyPageLayout(),需要将其通知登录/注销到jQuery.ready()(在nw.js中)
在页面上的脚本标记中内联调用setLoggedIn()或clearLoggedIn()。
我不知道如何确保对setLoggedIn()或clearLoggedIn()的调用发生在ModifyPageLayout()之前,modifyPageLayout()当前包装在jQuery.ready()块中,因此只要加载DOM就可以运行。
如果我将setLoggedIn()和clearLoggedIn()添加到jQuery.ready()块中,则它们将按照添加的顺序执行,因此该顺序将变为:
modifyPageLayout()
,然后是setLoggedIn()
或setLoggedOut()
,因此在jQuery中都是如此。 ready()块无法实现意图。setLoggedIn()和clearLoggedIn()当前依赖于nw.js定义的代码,因此我无法调用它们
在包含nw.js之前。
一种潜在的解决方案:
我可以通过将它编写为来延迟ModifyPageLayout函数:
modifyFunction = modifyPageLayout; // Non-executed first-class function variable. (created in nw.js)
setLoggedIn(); // inline in the head of the page
modifyFunction(); // inline in the head of the page
有人还有其他解决方案吗?
最佳答案
也许我错过了一些东西,如果抱歉,我很抱歉。
但是对于setLoggedIn()和clearLoggedIn(),您是否希望它们在有人单击登录或注销时发生?因此,您可以在document.ready内添加一个事件处理程序。
据推测,当某人登录或注销时会发生某些事情的事实可以用于ModifyPageLayout函数来确定显示什么以及如何显示。
无论如何,我不确定问题是否比这更复杂