在我选择的方法在JavaScript中完成执行后,我该如何将事件连接到触发器

How do can I wire up an event to trigger after methods of my choosing finish execution in JavaScript?

本文关键字:事件 触发器 连接 执行 方法 选择 JavaScript      更新时间:2023-09-26

很难用一个问题来概括,但以下是详细信息:

我有一个ASP.NET MVC 3项目(实际上有很多)。

我的标准做法是,每个视图都有一个Init()方法,该方法在文档准备就绪时激发。这是我放置所有UI代码的地方,比如渲染按钮和手风琴等。

我使用的技巧是通过将html标记设置为display: none来隐藏未格式化的html元素,在Init()完成后,我可以取消隐藏所有内容。

这工作得很好,但我最初在布局页面中显示内容,但这将在视图的Init代码完成运行之前执行。如果我将部分视图与它们自己的Javascript一起使用,它会变得更加复杂。

我想在一个地方附加一个回调,在我所有可能的Init()调用完成后触发。

我尝试使用自定义事件,但之后我必须在每个Init方法结束时触发它们,这不是很有效。

请求代码:

布局页面

<script>
     $("html").addClass('init') // init has display: none
     $(function() {
          InitLayout() // Basic stuff for every page like menu, buttons, etc
          $("html").removeClass('init'); // show all content
     });
</script>

查看页面

<script>
    $(function() {
         ViewInit() // Init all custom ui elements on page: tabs, accordions, etc
    });
</script>

问题是removeClass将在每个页面的Init激发之前出现。我正试图找到一种方法来避免在每个Init方法的底部都有removeClass调用。是否有某种方法可以通过编程方式附加回调以避免重复代码。我在这里的主要目标是实现未格式化内容的隐藏,直到全局完成所有内容,这样我就不必在每个视图中担心它了。

您可以尝试将init过程的出现注册到全局变量(数组)中。这应该在document.ready()或等效的JQuery之外完成。所以在<script>标签中。

当您的Init函数在document.ready()事件处理程序或其等效JQuery中完成时,请注销该事件。

在注销时,请检查是否有剩余的事件,如果没有,请修改您的html样式。

在这种情况下,脚本解析和DOM实际完成加载之间的差距可能对您有用。