2010-08-26 7 views
2

J'essaie de fermer une visionneuse lorsque vous appuyez sur Échap mais que la fenêtre contextuelle ne se ferme pas.Fermer la visionneuse lorsque vous appuyez sur ÉCHAP

$(document).keypress(function(e){ 

    if(e.keyCode==27 && popupStatus==1){ 

     disablePopup(); 
    } 
}); 

Voici le code complet:

var popupStatus = 0; 
var buttonDivID = ""; 
var conDivID = ""; 

//determine which div is clicked 
function setDiv(div) { 
    if(div==1){ 
     conDivID = "#intro"; 
    } 
    if(div==2) { 
     conDivID = "#presentation"; 
    } 
} 

//loading popup with jQuery magic! 

function loadPopup(){ 

    //loads popup only if it is disabled 

    if(popupStatus==0){ 

     $("#backgroundPopup").css({ 

      "opacity": "0.7" 

     }); 

     $("#backgroundPopup").fadeIn("slow"); 

     $(conDivID).fadeIn("slow"); 

     $(conDivID).CenterIt(); 

     popupStatus = 1; 

    } 

} 

//disabling popup with jQuery magic! 

function disablePopup(){ 

    //disables popup only if it is enabled 

    if(popupStatus==1){ 

     $("#backgroundPopup").fadeOut("slow"); 

     $(conDivID).fadeOut("slow"); 

     popupStatus = 0; 
     buttonDivID = ""; 
     conDivID = ""; 
    } 
} 



//centering popup 

function centerPopup(){ 

    //request data for centering 

    var windowWidth = document.documentElement.clientWidth; 

    var windowHeight = document.documentElement.clientHeight; 

    var popupHeight = $(conDivID).height(); 

    var popupWidth = $(conDivID).width(); 

    //centering 

    $(conDivID).css({ 

     "position": "absolute", 

     "top": windowHeight/2-popupHeight/2, 

     "left": windowWidth/2-popupWidth/2 

    }); 

    //only need force for IE6 

    $("#backgroundPopup").css({ 

     "height": windowHeight 

    }); 
} 

//CONTROLLING EVENTS IN jQuery 

$(document).ready(function(){ 

    $("#vid2").click(function(){ 
    //set the lightbox divs 
    setDiv(2); 
    loadPopup(); 
    }); 

    //CLOSING POPUP 

    //Click the x event! 

    $(".popupContactClose").click(function(){ 

     disablePopup(); 

    }); 

    //Press Escape event! 

    $(document).keypress(function(e){ 

     if(e.keyCode==27 && popupStatus==1){ 

      disablePopup(); 
     } 
    }); 
}); 

L'autre méthode, cliquez sur le bouton x ferme correctement la fenêtre. Pourquoi est-ce que ça ne le ferme pas?

+1

Avez-vous examiné le code-clé que vous utilisez dans votre manipulateur de clé? jQuery a le 'event.which 'qui peut être utilisé cross-browser pour déterminer quelle touche a été pressée: http://api.jquery.com/event.which/ – Pat

Répondre

17

Cela fonctionne:

$(document).ready(function(){ 
    $(document).bind('keydown', function(e) { 
     if (e.which == 27) { 
      alert('esc pressed'); 
     } 
    }); 
}); 
2

Il est un bug: bouton d'échappement ne fonctionne pas au-jquery.lightbox 0,5

Solution: http://code.google.com/p/jquery-lightbox/issues/detail?id=27#c4

Je ne sais pas si cela a été fixé par les gens de lightbox. J'ai fait un peu de débogage et j'ai découvert que sur la ligne 339 de jquery.lightbox-0.5js, le escapeKey était mis à 'undefined' sur ligne 339 pour les navigateurs Mozilla. Donc, j'ai ajouté le bloc de code suivant à la ligne 341 de re-régler la touche Échap var « 27 »:

// Fix because Escape Key wasn't being detected 
    if (escapeKey == undefined) { escapeKey = 27; } 

Cela devrait être juste au-dessus de la « // Obtenez la clé sous forme de minuscules » commentaire, que vous pouvez faire une recherche rapide dans le fichier pour.

Fonctionne pour moi maintenant.

+0

En fait, la seule réponse pertinente pour le problème" fermer lightbox lorsque ESC est pressé ". Je n'ai aucune idée pourquoi l'auteur de la question écrit autant de code. –

2

Il suffit d'utiliser keyup au lieu de et keypress qui au lieu de codeTouche. Chrome n'a renvoyé aucun code clé pour Escape et Firefox renvoie zéro lorsque vous utilisez la touche.

$(document).keyup(function(e){ 

    if(e.which == 27 && popupStatus == 1){ 

     disablePopup(); 
    } 
}); 
Questions connexes