0

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

2 回答 2

1

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

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

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

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

最干净的可能是选项 3。

于 2013-02-25T15:18:31.047 回答
0

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

将 tumblr 博客与网站集成

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

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

策略是:

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