【问题标题】:What methods can I use to rearrange the order of javascript function execution?我可以使用哪些方法来重新排列 javascript 函数的执行顺序?
【发布时间】:2010-12-20 09:12:50
【问题描述】:

如何重新排列独立于包含顺序的 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() 之前,它当前包装在 jQuery.ready() 块中,因此会在加载 DOM 时运行.

  • 如果我将 setLoggedIn() 和 clearLoggedIn() 添加到 jQuery.ready() 块中,它们将按照添加的顺序执行,因此顺序将变为:modifyPageLayout(),然后是 setLoggedIn() 或 @987654328 @ 所以 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

有人有其他解决方案吗?

【问题讨论】:

    标签: javascript jquery login deferred-execution


    【解决方案1】:

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

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

    据推测,当某人登录或注销时发生的事情可以用于 modifyPageLayout 函数来决定显示什么以及如何显示。

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

    【讨论】:

    • 我真的没有看到任何有用的客户端点击触发器用于运行 isLoggedIn(),因为即使他们点击“登录”,也可能导致登录失败,这会使 isLoggedIn( ) 作为谎言。 isLoggedIn() 和 clearLoggedIn() 由服务器根据 php 在会话中是否具有正确的登录凭据进行切换。我会尝试在问题中澄清这一点。
    • 也许使用 document.ready 调用 setLoggedIn() 和 window.load 来进行 modifyPageLayout(),然后呢?在此处讨论差异:4loc.wordpress.com/2009/04/28/documentready-vs-windowload
    • 我想我会得到所有的反馈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2019-07-31
    • 2023-04-02
    • 2010-09-17
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多