222 votes

Comment générer un popup simple à l'aide de jQuery

Je suis en train de concevoir une page web. Lorsque nous cliquons sur le contenu de la div nommée mail, comment puis-je afficher une fenêtre popup contenant une étiquette email et une zone de texte ?

1 votes

J'ai trouvé ceci réponse très utile pour des alertes rapides sans toucher au HTML ou CSS existant. Il crée et affiche un div en utilisant simplement jQuery à partir de js.

246voto

Andy Gaskell Points 15264

D'abord le CSS - modifiez-le comme vous le souhaitez :

a.selected {
  background-color:#1F75CC;
  color:white;
  z-index:100;
}

.messagepop {
  background-color:#FFFFFF;
  border:1px solid #999999;
  cursor:default;
  display:none;
  margin-top: 15px;
  position:absolute;
  text-align:left;
  width:394px;
  z-index:50;
  padding: 25px 25px 20px;
}

label {
  display: block;
  margin-bottom: 3px;
  padding-left: 15px;
  text-indent: -15px;
}

.messagepop p, .messagepop.div {
  border-bottom: 1px solid #EFEFEF;
  margin: 8px 0;
  padding-bottom: 8px;
}

Et le JavaScript :

function deselect(e) {
  $('.pop').slideFadeToggle(function() {
    e.removeClass('selected');
  });    
}

$(function() {
  $('#contact').on('click', function() {
    if($(this).hasClass('selected')) {
      deselect($(this));               
    } else {
      $(this).addClass('selected');
      $('.pop').slideFadeToggle();
    }
    return false;
  });

  $('.close').on('click', function() {
    deselect($('#contact'));
    return false;
  });
});

$.fn.slideFadeToggle = function(easing, callback) {
  return this.animate({ opacity: 'toggle', height: 'toggle' }, 'fast', easing, callback);
};

Et enfin le html :

<div class="messagepop pop">
  <form method="post" id="new_message" action="/messages">
    <p><label for="email">Your email or name</label><input type="text" size="30" name="email" id="email" /></p>
    <p><label for="body">Message</label><textarea rows="6" name="body" id="body" cols="35"></textarea></p>
    <p><input type="submit" value="Send Message" name="commit" id="message_submit"/> or <a class="close" href="http://stackoverflow.com/">Cancel</a></p>
  </form>
</div>

<a href="http://stackoverflow.com/contact" id="contact">Contact Us</a>

Voici une démo et une mise en œuvre de jsfiddle.

En fonction de la situation, vous pouvez vouloir charger le contenu de la popup via un appel ajax. Il est préférable d'éviter cela si possible, car l'utilisateur risque d'avoir un délai plus important avant de voir le contenu. Voici quelques modifications que vous devrez apporter si vous adoptez cette approche.

Le HTML devient :

<div>
    <div class="messagepop pop"></div> 
    <a href="http://stackoverflow.com/contact" id="contact">Contact Us</a>
</div>

Et l'idée générale du JavaScript devient :

$("#contact").on('click', function() {
    if($(this).hasClass("selected")) {
        deselect();               
    } else {
        $(this).addClass("selected");
        $.get(this.href, function(data) {
            $(".pop").html(data).slideFadeToggle(function() { 
                $("input[type=text]:first").focus();
            });
        }
    }
    return false;
});

0 votes

Ça marche, merci. Mais je vais inclure un autre bouton appelé register. Lorsqu'il est cliqué, le formulaire d'enregistrement doit apparaître. Pour cela, j'ai inclus la même fonction et changé le nom des ids et des classes. Le problème est que lorsque je clique sur le bouton de fermeture du formulaire d'inscription, le formulaire de contact s'affiche. Besoin d'aide @jason Davis

1 votes

Pour supprimer le html que vous ajoutez à la fermeture, changez la méthode de fermeture en $(".close").live('click', function() { $(".pop").slideFadeToggle() ; $("#contact").removeClass("selected") ; $(".pop").remove() ; //ajoutez ceci... return false ; }) ; cela corrigera le problème que vous rencontrez lorsque vous cliquez sur le lien plus d'une fois avant de fermer la popup. belle réponse au passage, astucieuse et simple...

10 votes

@yahelc Essayez de cliquer sur "S'inscrire" plusieurs fois de suite, puis cliquez sur "Annuler". Uh-oooohhhh.

101voto

karim79 Points 178055

Vérifiez Dialogues jQuery UI . Vous l'utiliseriez comme ceci :

Le jQuery :

$(document).ready(function() {
    $("#dialog").dialog();
});

La majoration :

<div id="dialog" title="Dialog Title">I'm in a dialog</div>

C'est fait !

Gardez à l'esprit que c'est le cas d'utilisation le plus simple qui soit. documentation pour avoir une meilleure idée de ce que l'on peut faire avec.

0 votes

En dehors de Jquery, dois-je inclure d'autres plugins ? @Karim

9 votes

@Rajasekar - Vous devez télécharger le bundle jQuery UI et au moins inclure ui.core.js et ui.dialog.js pour obtenir un dialogue. Si vous voulez que le dialogue puisse être glissé et/ou redimensionné, vous devrez inclure ui.draggable.js et ui.resizable.js.

6 votes

Hmm. La réponse serait meilleure avec un jsfiddle.

23voto

jasondavis Points 11944

J'utilise un plugin jQuery appelé ColorBox c'est

  1. Très facile à utiliser
  2. léger
  3. personnalisable
  4. la plus belle boîte de dialogue contextuelle que j'aie jamais vue pour jQuery

9voto

Marvin3 Points 601

Essayez le Magnifique Popup il est réactif et ne pèse qu'environ 3KB.

8voto

Yanni Points 1043

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X