Je te mets une solution qui utilise les classes plutot que show() / hide() mais le principe est le meme. Par contre j'ai pas pigé quels sont les sélecteurs a utiliser pour les trucs a cliquer et a ceux a afficher, donc faudra adapter a ton cas particulier:
L'idée est
- Pour le delais: de lancer un timer a l'ouverture de ton truc pour le fermer ensuite automatiquement (fonction JS setTimeout())
- Pour le clique en dehors du truc: detecter un clique sur le body et verifier que celui-ci n'est pas executé sur le truc en question
Le code ressemble a quelque chose comme ca :
$(document).ready(function(){
$('.events').click(function(e){
// Affiche ton truc en lui ajoutant une classe
$( /*...*/ ).addClass('display');
// Lance un timer pour cacher ton truc en lui retirant la classe apres 5s
setTimeout( function(){
$( /*...*/ ).removeClass('display');
}, 5000);
});
$('body').click(function(e){
// Détecte un click sur le body
// Vérifier que c'est pas sur ton truc qu'on click
// Enleve la classe 'display' pour fermer les trucs
if ( e.target.class != 'display' ) {
$('.display').removeClass('display');
}
});
});