如何防止脚本在另一个工作时工作

时间:2013-02-25 15:12:46

标签: javascript keyboard conditional-statements

我有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}

2 个答案:

答案 0 :(得分:1)

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

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

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

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

  4. 最干净的可能是选项3。

答案 1 :(得分:0)

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

Integrating tumblr blog with website

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

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

策略是:

  1. 确定Tumblr用于响应此事件的事件。
  2. 删除事件处理程序
  3. 重新添加你自己的副本,当按下箭头键时,根据你想要改变的任何上下文确定是否要解雇你的代码或Tumblr(不清楚你的问题,但可能是示例取决于发起事件/具有焦点/等的标签。