2013-02-25 59 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你的問題,但它可能例如取決於什麼標籤發起事件/有焦點/等)。