2013-02-25 2 views
0

У меня есть этот код для tumblr, и мне бы хотелось, чтобы при использовании функции .html_photoset 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} 

ответ

1

Существует несколько способов приблизиться к этому.

  1. Вы можете установить глобальный флаг, когда html_photoset происходит, а затем в вашем другой OnKeyUp обработчика проверить глобальный флаг и ничего не делать, если html_photoset активен. Когда html_photoset неактивен, вы должны очистить флаг, чтобы ваш другой обработчик ключей начал работать.

  2. Вы также можете удалить обработчик onkeyup и переустановить его в соответствующее время.

  3. Вы могли бы остановить распространение события с e.stopPropagation() в обработчике html_photoset так, что, когда вы обработали событие в html_photoset, он не будет распространяться до уровня документа, где ваш другой обработчик KeyUp есть.

Чистейший, вероятно, вариант 3.

0

Вы, вероятно, нужно, чтобы получить доступ к API Tumblr Javascript. По-видимому, это доступно, но только если вы вошли в систему:

Integrating tumblr blog with website

Так что я не могу получить доступ к нему, чтобы получить гораздо более детализированы, к сожалению.

Вообще говоря, вы, вероятно, также должны использовать библиотеку, такую ​​как jquery, чтобы абстрагировать код события, поскольку вызовы, которые вы используете, будут работать только в некоторых браузерах. В идеале вы использовали бы любую библиотеку событий, которую уже использует tumblr, которая используется для этого, в частности, потому что вы захотите вмешаться в ее событие onkeydown/onkeypress/onkeyup в зависимости от того, как они привязываются.

Стратегия:

  1. Определите, в какое событие Tumblr используется, чтобы ответить на это сообщение.
  2. Удалить обработчик событий
  3. Добавить свою собственную копию обратно и когда клавиши со стрелками будут нажаты, определить, следует ли запускать ваш код или Tumblr на основе любого контекста, в котором вы хотели, чтобы это изменялось (неясно от ваш вопрос, но он может, например, зависеть от того, какой тег инициировал событие/имел фокус/и т. д.).
Смежные вопросы