2013-02-25 36 views
0

我有这个代码tumblr,我希望当.html_photoset fonction发生时,.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} 

回答

1

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

  1. 您可以设置一个全局标志时html_photoset正在发生的事情,然后在其他的onkeyup处理程序检查全局标志,什么也不做,如果html_photoset处于活动状态。当html_photoset变为非活动状态时,您将清除该标志,以便您的其他键控处理程序开始工作。

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

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

最干净的可能选项3

0

你可能需要获得访问的tumblr的Javascript API。显然,这是可用的,但只有当你登录:

Integrating tumblr blog with website

所以我不能访问它来获得更详细的不幸。

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

策略是:

  1. 确定Tumblr正在使用哪个事件来响应此事。
  2. 删除事件处理程序
  3. 将您自己的副本添加回来,并且当方向键被按下时,根据您希望的任何上下文来决定是否触发您的代码或Tumblr's你的问题,但它可能例如取决于什么标签发起事件/有焦点/等)。