JeuWeb - Crée ton jeu par navigateur
[Résolu] jQuery et l'ajout de contenu dans une formulaire - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] jQuery et l'ajout de contenu dans une formulaire (/showthread.php?tid=6065)

Pages : 1 2


[Résolu] jQuery et l'ajout de contenu dans une formulaire - supermeganono - 05-04-2012

Bonjour,

J'ai une bizarrerie que je ne comprends pas dans Jquery. Je réalise actuellement ma nouvelle interface de jeu. Pour cela, le joueur va cliquer sur la case et la sélectionner avant de choisir l'action à effectuer. A chaque clic je fais des vérifications car chaque case est prévu pour un formulaire. Exemple, ces vaisseaux pour le déplacement, les ennemis pour l'attaque ou une case vide pour l'utilisation d'un objet ( voir sa navette ou une navette ennemi ).

Bref j'arrive à faire ce que je veux mais je pige pas ceci :


$("#attaquer").val($("#attaquer").val()+"<input type=\"hidden\" name=\""+recupId+"\" value=\""+recupId+"\" />");
$("#affsecdep").after("<input type=\"hidden\" name=\""+recupId+"\" value=\""+recupId+"\" />");

Sur la première ligne, je reprend le contenu actuel du formulaire auquel j'ajoute un champ hidden et sa valeur.
Dans la deuxième je mets un champ nul dans le formulaire et je viens placé mes input hidden derrière ce champ nul.

La différence est que val() renvoi un formulaire vide lorsque php l'analyse ( $_POST est vide ).
Avec after() je reçois tout a fait correctement les valeurs dans php, mais ça m'oblige a placer un champ nul dans le formulaire pour ensuite venir caler mes autre champ derrière.


Lorsque je fait un alert du formulaire avec val(), les deux me renvoi exactement la même valeur avant envoi ! A la différence que dans php l'un est vide et l'autre et bien reçu !

Je vais fonctionner avec after mais j'aime pas rester sur une incompréhension.
Quelqu'un pourrait m'éclairer svp ?


RE: Jquery et l'ajout de contenu dans une formulaire - niahoo - 05-04-2012

.val() c'est pour les input pas pour les formulaires
ça renvoie l'attribue 'value' d'un input ou de l'option sélectionnée d'un select. si tu veux modifier tout le html contenu dans ton formulaire c'est .html() / .html('<....>')
Je ne comprends pas ta phrase
Citation :La différence est que val() renvoi un formulaire vide lorsque php l'analyse ( $_POST est vide ).

.val() c'est du javascript, PHP n'a pas accès au contenu de cette variable, il a accès à ce que ton navigateur lui envoie dans la requête

$("#attaquer").html(
$("#attaquer").html()
+ '<input type="hidden" name="'+recupId+'" value="'+recupId+'" />'
);
$("#affsecdep").after(
'<input type="hidden" name="'+recupId+'" value="'+recupId+'" />'
);

à condition que #attaquer soit un form sinon j'ai rien pigé


RE: Jquery et l'ajout de contenu dans une formulaire - Sephi-Chan - 05-04-2012

Je ne connais pas la structure finale de ton DOM, mais ne serait-ce pas parce que le champ caché n'est pas généré à l'intérieur de la balise form qui est validée ?

Par ailleurs, ton code est difficile à lire à cause de ton utilisation abusive des caractères d'échappement.
Tu peux utiliser les quotes simples ou doubles pour améliorer la lisibilité.


// Ta version actuelle.
$("#attaquer").val($("#attaquer").val() + "<input type=\"hidden\" name=\""+recupId+"\" value=\""+recupId+"\" />");

// Une version qui utilise les quote pour éviter les échappements inutiles.
$("#attaquer").val($("#attaquer").val() + '<input type="hidden" name="'+recupId+'" value="'+recupId+'" />');

// Une version qui utilise la méthode jQuery pour construire du DOM.
$("#attaquer").val($("#attaquer").val() + $('<input />', { type: 'hidden', name: recupId, value: recupId });


Edit : Comme le dit Niahoo, ton utilisation de val est mauvaise.


RE: Jquery et l'ajout de contenu dans une formulaire - niahoo - 05-04-2012

Mais bon je dirais que la meilleure méthode dans ces cas là c'est .append() car c'est ça vraiment que tu souhaites faire.


RE: Jquery et l'ajout de contenu dans une formulaire - supermeganono - 05-04-2012

En effet, j'ai été relire la description de la fonction .val() et l'utilisation que j'en faisait était mauvaise. Maintenant je comprend mieux pourquoi.
Le input n'étant pas mis dans le form avec le .val(), le serveur ne risquer pas de recevoir quoique ce soit.

Pour mes caractères d'échappements, tout le monde me le dis Smile J’essaie de me rééduquer, mais c'est dur dur et ça prendra du temps Smile En attendant je l'ai corrigé.

Merci bien !
Aller dormir moins con, c'est quand même plaisant haha Smile


RE: Jquery et l'ajout de contenu dans une formulaire - Sephi-Chan - 05-04-2012

(05-04-2012, 03:29 PM)supermeganono a écrit : Pour mes caractères d'échappements, tout le monde me le dis Smile J’essaie de me rééduquer, mais c'est dur dur et ça prendra du temps Smile En attendant je l'ai corrigé.

Dans l'idéal, il faut que ça vienne de toi. Il faut que tu apprennes à tes yeux à pleurer en voyant tous ces slashes.


(05-04-2012, 03:29 PM)supermeganono a écrit : Aller dormir moins con, c'est quand même plaisant haha Smile

Et encore, la journée n'est pas terminée !


RE: [Résolu] jQuery et l'ajout de contenu dans une formulaire - supermeganono - 05-04-2012

Y'a qu'un seul soucis pour moi, c'est que je préfère les versions avec slash :] Bien que je suis bien conscient de perdre du temps à l'écrire Wink



RE: [Résolu] jQuery et l'ajout de contenu dans une formulaire - niahoo - 05-04-2012

C'est ton droit mais c'est chelou


RE: [Résolu] jQuery et l'ajout de contenu dans une formulaire - Maks - 06-04-2012

Je trouve ça illisible personnellement

Sous Sublime Text il affiche les anti-slash en violet foncé ça reste plus lisible Smile


RE: [Résolu] jQuery et l'ajout de contenu dans une formulaire - Sephi-Chan - 06-04-2012

Je doute franchement que tu préfères, mais plutôt que tu t'y es habitué. Parce que objectivement, les slash ne servent réellement à rien : c'est une mauvaise pratique de programmation.

Et de toute façon, le mieux est de générer ton élément avec la méthode jQuery, ainsi que d'utiliser la méthode d'injection de contenu appropriée.


$("#attaquer").after($('<input />', { type: 'hidden', name: recupId, value: recupId });

Ensuite, quand on génère beaucoup de DOM, on peut utiliser des moteurs de templates en Javascript. C'est encore le plus lisible, surtout quand on doit générer des gros bouts.