【问题标题】:how to prevent a script from working when another one is working当另一个脚本正在工作时如何防止脚本工作
【发布时间】:2013-02-25 15:12:45
【问题描述】:

我有这个 tumblr 代码,我希望当 .html_photoset 函数发生时, .onkeyup 函数不会发生,因为这两个函数都使用箭头键! 如何在第二个脚本中添加一个 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}

【问题讨论】:

    标签: javascript keyboard conditional-statements


    【解决方案1】:

    有很多方法可以解决这个问题。

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

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

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

    最干净的可能是选项 3。

    【讨论】:

      【解决方案2】:

      您可能需要访问 Tumblr Javascript API。显然它是可用的,但前提是您已登录:

      Integrating tumblr blog with website

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

      一般来说,您可能还应该使用 jquery 之类的库来抽象您的事件代码,因为您在这里使用的事件调用仅适用于某些浏览器。理想情况下,您应该利用 tumblr 本身已经使用的任何事件库来完成此操作,特别是因为您将要根据它们的绑定方式干预其 onkeydown/onkeypress/onkeyup 事件。

      策略是:

      1. 确定 Tumblr 使用哪个事件来对此做出响应。
      2. 删除事件处理程序
      3. 重新添加您自己的副本,当箭头键被按下时,根据您希望它改变的任何上下文确定是触发您的代码还是 Tumblr(从您的问题中不清楚,但它可能用于示例取决于启动事件/具有焦点/等的标签。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-03
        • 2021-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多