我可以使用哪些方法重新排列javascript函数执行的顺序?

时间:2009-11-25 17:09:12

标签: javascript jquery login deferred-execution

如何重新排列独立于包含顺序的javascript函数执行顺序。

一个有助于但不能完全回答我的问题的问题: Can you have multiple $(document).ready(function() sections?(答案是肯定的,它们按照将它们添加到jQuery.ready中的顺序执行( ))。

为了方便通知,我试图让我的javascript登录/未登录,在我的BBG ninjawars.net上。我希望使用一个简单的系统,让服务器端的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()之前,它当前包装在jQuery.ready()块中,因此每当加载DOM时就会运行

  • 如果我将setLoggedIn()和clearLoggedIn()添加到jQuery.ready()块,它们将按添加的顺序执行,因此顺序将变为:modifyPageLayout(),然后{{1}或setLoggedIn()所以jQuery.ready()块中的所有内容都无法实现意图。

  • setLoggedIn()和clearLoggedIn()目前依赖于代码定义的nw.js,所以我无法调用它们 在包括nw.js之前。

一个可能的解决方案:

我可以通过将其写为:

来延迟modifyPageLayout函数
setLoggedOut()

任何人都有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

也许我错过了什么,很抱歉,如果我。

但是对于setLoggedIn()和clearLoggedIn(),你是否希望它们在有人点击登录或注销时发生?那么你可以在document.ready中添加一个事件处理程序来处理它。

据推测,当某人登录或退出时发生某事时,可以使用modifyPageLayout函数来决定显示的内容和方式。

无论如何,我不确定问题是否比那个更复杂