Pour commencer, il ne faut pas utiliser $.get pour envoyer un formulaire.
Le $.get est là pour récupérer des infos, pas pour en envoyer.
Il faut donc utilise $.ajax
Ensuite, pour le paramètre "data", plutôt que de mettre un à un les champs, utilise le form.serialize. Ce sera bien plus rapide et au moins, tu seras sûr qu'il enverra les données comme il faut.
Après, on envoie JAMAIS un formulaire en get. TOUJOURS en post. Ca évite de dépasser les limites HTTP du GET (255 caractères), et de passer 3 jours à chercher le bug quand c'est le cas.
Et pour finir, tant que tu es en get, il se passe quoi si tu appelles directement ta page email.php avec les paramètres de ton formulaire ? Faut vérifier s'il n'y a pas des erreurs côté PHP
Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
Mouais j'ai fait des tests en dehors de mon site et sans utiliser mon plugin et ça fonctionne...
Donc je suis un peu saoulé de ne pas savoir pourquoi ça ne fonctionne lorsque j'intègre mon plugin.
En fait, à la façon dont tu l'as implémenté, ça n'est pas vraiment un plugin JQuery. Car un plugin doit être une extension de l'objet JQuery, et toujours retourner un objet de type JQuery.
Or là, j'ai l'impression qu'il s'utilise en autonome, mais en se basant sur JQuery.
J'espère être assez clair
Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
$("#formulaire").submit(function(){
var ok = $(this).jform();
...
});
C'est à dire que ton plugin doit être capable de récupérer le sélecteur de JQuery pour travailler sur l'objet.
Et même, il faudrait que .jform() retourne également un objet de type JQuery pour être réutilisé derrière (ex: $("#form").jform().html("pouet"); ). mais vu l'utilisation, inutile de pousser aussi loin
Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
Oui je sais plus si c'est Golmote qui avait dit ça (en même temps c'est lui qui m'avait indiqué la structure à adopter ) qu'on ne pouvait pas utiliser le chaînage jQuery.
J'aimerais pouvoir faire comme tu dis mais du coup je ne sais pas comment faire dans le plugin, comment le coder donc ? Tout en sachant que le plugin doit avoir son propre espace de noms...
J'ai essayé de m'inspirer de plugins existants pour voir comment ils étaient structurés mais ça n'a pas répondu à mes attentes.
Et comment ensuite appeler mes fonctions ? En passant le nom de la fonction en paramètre ?
Si tu peux me donner des exemples pour que je puisse comprendre ne serait-ce que la structure à mettre en place... Merci.
J'aimerais savoir si il y a des avantages/inconvénients pour chaque manière de procéder. Et dans le cas de mon plugin, quelle serait la meilleure méthode ? Que ferais-tu à ma place ? Pourquoi ?
Oula oui. J'avais tenté de te répondre, mais à cause d'un bug du site, j'ai abandonné. Et du coup, j'ai oublié de revenir.
Alors en fait, j'avoue que moi-même je ne comprends pas l'intérêt de chacune des méthodes. De mon analyse, on utilise plutôt fn quand on souhaite n'utiliser que le moteur de JQuery, alors qu'on utilisera extend quand on veut reprendre et modifier le moteur (puisque extend s'occupe de faire des "merge" d'objets, et donc de fonctions). Mais je ne peux pas l'assurer avec certitude.
De mon expérience en création de plugin (qui se résume à des tests), je dirais que la manière la plus propre de procéder est la suivante :
// la closure
(function($){
// on merge l'objet fn avec le plugin (plutôt que de prototyper)
$.fn.extend({
// on créé l'objet avec les paramètres
jform: function(options) {
// on initialise les valeurs par défaut
var defaults = {
a: 1,
b: 2
// etc
};
// on merge les valeurs par défaut avec les paramètres
var options = $.extend(defaults, options);
// ici les fonctions internes au plugin
var c = function(){...},
d = function(){...};
// enfin, on écrit le script principal du plugin
for, if, truc, bidule
// et on permet le chaînage avec
return this;
}
});
})(jQuery);
Tu peux évidemment oublier le chaînage puisque ton plugin doit te retourner true ou false pour la validation du formulaire. Mais en tout cas, c'est sur cette base que je partirais, si j'avais à faire un plugin.
Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
En fait, fn est la partie publique de JQuery. Donc par exemple, quand tu utilises $("bla").html(), tu appelles JQuery.fn.html()
Pour ton plugin, ce sera pareil. Il suffira d'utiliser $("#tonformulaire").jform() pour que les traitements se lancent. Et avec cette méthode, tu as accès directement à ton formulaire grâce à la variable "selector" (dans ton plugin this.selector te retournera l'objet form passé en paramètre à l'objet JQuery initial)
Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
Je fais des essais, désolé si je pose des questions idiotes c'est juste qu'il faut que je comprenne le "truc".
On considère <formid="form1"></form> et $('#form1').jform();.
Et le plugin :
(function($){
// on merge l'objet fn avec le plugin (plutôt que de prototyper)
$.fn.extend({
// on créé l'objet avec les paramètres
jform: function(options) {
// on initialise les valeurs par défaut
var defaults = {
a: 1,
b: 2
// etc
};
// on merge les valeurs par défaut avec les paramètres
var options = $.extend(defaults, options);
var $t = $(this);
// ici les fonctions internes au plugin
// INPUT TEXT
inputText = function(params) {
var defaults = {
disabled: false,
password: false,
hidden: false,
focus: false,
required: false,
maxlength: 255,
value: '',
br: 0
};
var p = $.extend(defaults, params), self = this;
$t.wrap($div),
c = (p.hidden) ? 'hidden' : 'text';
c = (p.password) ? 'password' : 'text';
var $l = $('<label></label>'), $i = $('<input type="'+c+'"/>');
$t.append($l).append($i);
$l.append(p.label).attr('for', p.id);
$i.attr('id', p.id).attr('name', p.name).attr('value', p.value).attr('maxlength', p.maxlength);
for(i = 0; i < p.br; i++) $i.after('<br />');
(p.disabled) ? $i.attr('disabled', 'disabled') : $i.removeAttr('disabled');
if(p.required) $i.attr('required', 'required');
if(p.format) $i.attr('format', p.format);
}
// et on permet le chaînage avec
return this;
}
});
})(jQuery);
Il n'y a aucune erreur dans Firebug.
Ma question est la suivante, comment appeler la fonction inputText() et lui passer ma mappe de paramètres comme je faisais avant ?
Oui, j'imagine que si tu veux que tes fonctions soient accessible depuis l'extérieur, il faut faire un extend.
Il faudrait donc prendre ce modèle :
// la closure
(function($){
// on merge l'objet fn avec le plugin (plutôt que de prototyper)
$.fn.extend({
// on créé l'objet avec les paramètres
jform: function(options) {
// on initialise les valeurs par défaut
var defaults = {
a: 1,
b: 2
// etc
};
// on merge les valeurs par défaut avec les paramètres
var options = $.extend(defaults, options);
// enfin, on écrit le script principal du plugin
for, if, truc, bidule
// et on permet le chaînage avec
return this;
}
});
$.fn.jform.extend({
// ici les fonctions externes au plugin
c: function(){...},
d: function(){...}
});
})(jQuery);
Bon après, je ne suis pas non plus un pro de la création de plugin
Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
(function($){
// on merge l'objet fn avec le plugin (plutôt que de prototyper)
$.fn.extend({
// on créé l'objet avec les paramètres
jform: function(options) {
// on initialise les valeurs par défaut
var defaults = {
a: 1,
b: 2
};
// on merge les valeurs par défaut avec les paramètres
var options = $.extend(defaults, options);
var $t = $(this);
// ici les fonctions internes au plugin
// et on permet le chaînage avec
return this;
}
$.fn.jform.extend({
// ici les fonctions externes au plugin
inputText : function(params) {
var defaults = {
disabled: false,
password: false,
hidden: false,
focus: false,
required: false,
maxlength: 255,
value: '',
br: 0
};
var p = $.extend(defaults, params), self = this;
c = (p.hidden) ? 'hidden' : 'text';
c = (p.password) ? 'password' : 'text';
var $l = $('<label></label>'), $i = $('<input type="'+c+'"/>');
$t.append($l).append($i);
$l.append(p.label).attr('for', p.id);
$i.attr('id', p.id).attr('name', p.name).attr('value', p.value).attr('maxlength', p.maxlength);
for(i = 0; i < p.br; i++) $i.after('<br />');
(p.disabled) ? $i.attr('disabled', 'disabled') : $i.removeAttr('disabled');
if(p.required) $i.attr('required', 'required');
if(p.format) $i.attr('format', p.format);
}
});
});
})(jQuery);
[jQuery] Envoi de form en GET puis affichage du résultat
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.