如何防止一个脚本在另一个脚本运行时运行

how to prevent a script from working when another one is working

本文关键字:脚本 另一个 运行时 运行 一个 何防止      更新时间:2023-09-26

我有这段tumblr的代码,我希望当.html_photoset函数发生时,.onkeyup函数不会发生,因为这两个函数都使用箭头键!如何在第二个脚本中添加if,以防止在第一个脚本打开时发生if?

{block:Photoset}
     {block:PermalinkPage} 
        <script type="text/javascript">
            $(document).ready(function() {
                $('.html_photoset').killPhotoset({
                    photoSize: 500
                });
            });
        </script>               
        <!-- [...] -->
        {block:PermalinkPagination} 
            <div class="permpaginate">
                {block:NextPost}
                    <a href="{NextPost}" id="prevp">Previous Project</a>
                {/block:NextPost}
                {block:PreviousPost}
                    <a href="{PreviousPost}" id="nextp">Next Project</a>
                {/block:PreviousPost}
            </div>
        {/block:PermalinkPagination}
        <script type="text/javascript">
            window.onload = function () {
                document.onkeyup = function(event) {
                    var e = (!event) ? window.event : event;
                    switch (e.keyCode) {
                        case 37:
                            window.location.href = document.getElementById('prevp').href;
                            break;
                        case 39:
                            window.location.href = document.getElementById('nextp').href;
                            break;
                    }
                };
            };
        </script>
    {/block:PermalinkPage}
{/block:Photoset}

有很多方法可以实现这一点。

  1. 当html_photoset发生时,您可以设置一个全局标志,然后在另一个onkeyup处理程序中检查全局标志,如果html_photeset处于活动状态,则不执行任何操作。当html_photoset处于非活动状态时,您将清除该标志,以便其他keyup处理程序开始工作。

  2. 您也可以卸载onkeyup处理程序,并在适当的时候重新安装它。

  3. 您可以在html_photoset处理程序中使用e.stopPropagation()停止事件传播,这样在处理了html_photeset中的事件后,它就不会传播到其他keyup处理程序所在的文档级别。

最干净的可能是选项3。

您可能需要访问Tumblr Javascript API。显然,它是可用的,但只有当你登录:

整合tumblr博客与网站

不幸的是,我无法访问它以获得更多详细信息。

一般来说,您可能还应该使用像jquery这样的库来抽象事件代码,因为您在这里使用的事件调用只能在某些浏览器中工作。理想情况下,你应该利用tumblr本身已经在使用的任何事件库来完成这项工作,特别是因为你想干预它的onkeydown/onkeypress/onkeyup事件,这取决于它们的绑定方式。

策略是:

  1. 确定汤博乐正在使用哪个事件对此进行响应
  2. 删除事件处理程序
  3. 将您自己的副本添加回中,当按下箭头键时,根据您希望的上下文来确定是激发您的代码还是汤博乐的代码(从您的问题中不清楚,但可能取决于启动事件的标签/焦点等(
相关文章: