Bonjour,
je débute en Jquery, a propos e événement un sujet qui me chagrine depuis 2 jours. Je souhaite afficher un petit formulaire via une boite modal (sorte de poppup) sur un site pour demander l'mail du visiteur. Le problème, l'affichage va se faire via une boucle en provenance de mysql pour afficher les articles sur une page principale. Du coup, lorsque je clique sur mon bouton pour ouvrir le poppup, il y a autant des poppups qui s'affichent qu'il y ait des articles affichés, je me retouve des fois à 10, 20 poppups pour un seul click bouton. Tandis que je souhaite que l’événement se passe sur le bouton cliqué uniquement avec un seul poppup. Quelque peut m'apporter sa lumière. (excusez moi c'est mon premier post, je ne sais pas si je dois de m'étaler autant).

<?php foreach products as product; {?>
//Mon formulaire est pris dans un <td> ainsi :
  <div class="dialog" title="Créer votre listes des produits :">
  <form action="" method="post">
  <label>Ajouter à votre liste:</label><br/>
  <input type="text" name="NameListeCatProduit" id="NameListeCatProduit" />
  <input type="submit" class="submitListeCatProduit" value="Valider" />
  </form>
  </div>
  <input type="button" class="buttonListeCatProduit" value="Ajouter dans votre liste" />
<php }?>

//Puis mon jquery est ainsi :

$(document).ready(function() {
$(function() {
$(".dialog").dialog({
autoOpen: false
});
$(".buttonListeCatProduit").on("click", ".buttonListeCatProduit", function(e) {
$("e.dialog").dialog("open");
});
});
// Validating Form Fields.....
$(".submitListeCatProduit").click(function(e) {
var name = $(".NameListeCatProduit").val();
if ( name === '') {
alert("Please fill all fields...!!!!!!");
e.preventDefault();
} else {
alert("Form Submitted Successfully......");
}
});
});

5 réponses


antho07
Réponse acceptée

Bonjour

En gardant la structure et sans soucis d'optimisation voir bonne pratique etc... :

<div class="dialog" data-id="tonIdDeFormulaire" ...>
</div>
<input type="button"..... data-open="tonIdDeFormulaire" />

PUIS

$(".buttonListeCatProduit").on("click", function(e) {
var idToOpen = e.target.dataset.open;
$('.dialog[data-id="'+idToOpen+'"]').dialog('open');
});

Déja : Indente ton code c'est pénible à lire.

Ensuite si tu veux faire comme ca, utilise un id unique à chaque .dialog. Utilise l'id de la base de donnée par exemple et ensuite tu peux ouvrir seulement celui qui est en rapport à l'id

jvnet
Auteur

Bonsoir,
Merci pour ta réponse Ipasseb, le souci si je mets un id différent à chaque passage de la boucle, comme le script jquery et le css qui gère la boite de dialog sont tous les 2 dans un autre fichier à l’extérieur de la boucle(ils ne peuvent recevoir l'indice de la boucle pour s’incrémenter en même temps), donc je ne vois pas comment je dois passer le nom de l'id au script jquery et le css, ce dernier changera à chaque itération de la boucle. j'espère que tu arriveras à me comprendre, c'est pas évident à expliquer. Si t'as d'autre propositions je suis preneur.
Merci à toi.

fais une page php ou html (mieux car tu utilise les bdd) utilisable et après seulement quelqu'un peut t'aider. Là ce n'est pas possible de t'aider plus à part te donner des idées

Mais à mon avis tu pars dans un très mauvais sens. Ton idée d'avoir x modales peut être envisagées si tu n'en as pas beaucoup, dans ton cas, il vaut mieux n'avoir qu'une seule modal et la gérer à partir du script. Perso si je dois avoir plusieurs fois la même modal définie dans mon code c'est qu'il n'est pas bon.

jvnet
Auteur

Bonjour,
Merci à vous tous en particulier à Antho07 qui m'a mit sur une bonne voie.
Problème résolu.