2017-07-05 5 views
1

Salut J'essaie de démarrer avec les touches activer puis une fois qu'un bouton est cliqué pour désactiver l'événement cela fonctionne très bien, puis une fois que le bouton de fermeture est pressé je veux activer l'événement à nouveau cette partie ne fonctionne pas Je voudrais résoudre ce en utilisant javascript si possible mon bouton de fermeture est dans un autre html (project1.html) fichier et est chargé via Ajax voici mon code:Activer et désactiver l'événement onkeydown?

var enable_keydown = document.onkeydown; 

$(".open-project").click(function(){ 
document.onkeydown = null; 
}); 

$("#project_close").click(function(){ 
document.onkeydown = enable_keydown; 
}); 


document.onkeydown = function(e) { 
    switch (e.keyCode) { 
     case 37: 
      $.fn.fullpage.moveSectionUp(); 
      break; 
     case 38: 
      $.fn.fullpage.moveSectionUp(); 
      break; 
     case 39: 
      $.fn.fullpage.moveSectionDown(); 
      break; 
     case 40: 
      $.fn.fullpage.moveSectionDown(); 
      break; 
    } 
}; 

Cordialement

+0

Essayez-vous d'empêcher quelqu'un de cliquer dessus plusieurs fois avant la fin? Si c'est le cas, désactivez le bouton et réactivez-le à la fin. – mkaatman

+0

.project_close ou #project_close – JSmith

+0

En haut, vous définissez 'enable_keydown' sur' document.onkeydown', mais vous ne définissez pas 'document.onkeydown' jusqu'à la fin, donc 'enable_keydown' va être' null' –

Répondre

1

Pour retirer votre écouteur d'événement fonction ne peut pas être anonyme afin que vous pouvez faire référence ultérieurement. définir ainsi votre fonction:

function moveSection(e) { 
    switch (e.keyCode) { 
     case 37: 
     case 38: 
      $.fn.fullpage.moveSectionUp(); 
      break; 
     case 39: 
     case 40: 
      $.fn.fullpage.moveSectionDown(); 
      break; 
     default: 
      break; 
    } 
} 

Ajouter à écouteur d'événement:

$(".open-project").click(function(){ 
    document.addEventListener('keydown', moveSection); 
}); 

et retirez-le:

$("#project_close").click(function(){ 
    document.removeEventListener('keydown', moveSection); 
}); 

Voir https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener et https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener

ce que vous faites ici

var enable_keydown = document.onkeydown; 

$("#project_close").click(function(){ 
    document.onkeydown = enable_keydown; 
}); 

se résume à document.onkeydown = document.onkeydown ce qui n'a pas de sens.

+0

Merci Ceci interrompt l'événement Rien ne bouge plus –

+0

@Neths L'événement sera ajouté seulement après avoir cliqué sur le bouton $ (". Open-project") 'tel que je l'ai compris était votre intention. Découvrez le violon par exemple: https://jsfiddle.net/hxk18jce/1/ – John

+0

J'ai complètement oublié que je charge le bouton de fermeture dans un autre fichier html via Ajax c'est probablement le problème –

1

Pour ce faire, je changerais votre gestionnaire désactiver à ceci:

$(".open-project").click(function(){ 
    $(document).on('keydown', function(e) { e.preventDefault(); }); 
}); 

Et pour le gestionnaire réactivez faire ceci:

$("#project_close").click(function(){ 
    $(document).off('keydown'); 
}); 

La fonction on() lie l'événement keydown au basique lly arrête l'événement et la fonction off() restaure la fonctionnalité par défaut du clavier. Vous pouvez vous référer à la documentation jQuery pour les fonctions ici:

http://api.jquery.com/on/

http://api.jquery.com/off/

1

Cliquer sur la fonction div close et assigner le bouton de raccourci Cliquer sur le bouton ouvert pour supprimer la fonction de mise au point de document.onkeydown.

function moveFunc(e) { 
 
      alert(e.keyCode); 
 
    }; 
 

 
$(".open-project").click(function(){ 
 
    document.onkeydown = null; 
 
}); 
 

 
$("#project_close").click(function(){ 
 
    document.onkeydown = moveFunc; 
 
});
.open-project{ 
 
    background-color: red; 
 
    width: 150px; 
 
    height: 150px; 
 
    } 
 
    
 
#project_close{ 
 
    background-color: green; 
 
    width: 150px; 
 
    height: 150px; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="open-project" >open project</div> 
 
<div id="project_close" >project close</div>

+0

Semble avoir le même effet, il fonctionne jusqu'à ce qu'il est temps de l'activer. Donc, pour commencer, il est activé, puis est désactivé, mais quand il devrait être activé à nouveau, il échoue –

+0

pouvez-vous poster un extrait? – JSmith

+0

J'ai complètement oublié que mon bouton de fermeture est chargé via un autre fichier html avec Ajax donc c'est probablement le problème –