Upload
d0ppelganger
View
227
Download
0
Embed Size (px)
Citation preview
8/6/2019 Creer Son Plugin jQuery
1/6
Crer un plugin jQuery : une
liste droulante personnalise
parPierre Schwartz (retour aux articles)
Date de publication : 31 mars 2009
Dernire mise jour :
Cet article va prsenter la cration d'un plugin pour jQuery en ralisant un widget de liste
droulante personnalise. Il est conseill d'tre dj l'aise avec l'utilisation de jQuery pour
aborder cet article.
Rappel : Introduction la bibliothque JavaScript jQuery
http://pckult.developpez.com/tutoriels/javascript/frameworks/jquery/introduction/http://khayyam.developpez.com/http://www.developpez.net/forums/member.php?u=29897http://www.developpez.com/8/6/2019 Creer Son Plugin jQuery
2/6
Crer un plugin jQuery : une liste droulante personnalise parPierre Schwartz (retour aux articles)
- 2 -Copyright 2009 - Pierre Schwartz. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 Ede dommages et intrts.
http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/
I - Qu'est-ce qu'un plugin jQuery ?............................................................................................................................. 3
II - Cration d'un plugin............................................................................................................................................... 3
II-1 - Lancement..................................................................................................................................................... 3
II-2 - Paramtres.................................................................................................................................................... 3
III - Ralisation d'une liste droulante personnalise................................................................................................. 4
III-1 - Code............................................................................................................................................................. 4
III-2 - CSS...............................................................................................................................................................6IV - Rsultat, conclusion..............................................................................................................................................6
http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/http://www.developpez.net/forums/member.php?u=29897http://www.developpez.com/8/6/2019 Creer Son Plugin jQuery
3/6
Crer un plugin jQuery : une liste droulante personnalise parPierre Schwartz (retour aux articles)
- 3 -Copyright 2009 - Pierre Schwartz. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 Ede dommages et intrts.
http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/
I - Qu'est-ce qu'un plugin jQuery ?
Un plugin jQuery est un ensemble de fonctions que l'on va rajouter l'espace de noms de jQuery de manire
enrichir les possibilits du framework. De nombreux plugins existent dj (la page des plugins jQuery), qu'il s'agisse
de crer de nouveaux widgets, de rajouter des fonctions aux oprations de base de jQuery ou de crer de nouveaux
comportements. Un plugin est avant tout une fonction qui sera appelable sur un objet jQuery, il sera compos d'unefonction publique et de plusieurs fonctions prives incluses dans la fonction publique.
Dans sa structure, jQuery est fait pour que tout le monde puisse y rajouter facilement des plugins. Un espace de
noms est ddi aux plugins : $.fn. Chaque plugin que vous rajouterez est cens se trouver cet endroit. En crant ducontenu dans $.fn.exemple(paramtres), votre plugin sera appelable directement parjQuery.exemple(paramtres).Un plugin sera appliqu sur un objet jQuery, provenant par exemple d'une recherche dans le DOM de la page et
possdera des paramtres, indiqus par le dveloppeur.
II - Cration d'un plugin
II-1 - Lancement
Pour crer un plugin il suffit en thorie de crer une fonction dans $.fn. On peut considrer cette fonction comme leconstructeur de votre plugin, rcuprant tous les paramtres et faisant le traitement propre au plugin, positionnant
les vnements, etc.
(function($) {
// dfinition du plugin
$.fn.exemple =function() {
alert('hello world');
return $(this);
};
})(jQuery);
Ce plugin minimaliste affichera "hello world" chaque fois qu'il sera appel.
ab$("div").exemple();
Ce code lancera 2 fois le plugin exemple, une fois sur chaque lment div.
On pensera toujours renvoyer un objet jQuery de manire conserver une interface fluide.
II-2 - Paramtres
Les paramtres sont faits pour tre passs sous forme JSON, cel offre entre autres la possibilit de dfinir desparamtres facultatifs. Le principe est de dfinir un jeu de paramtres par dfaut. jQuery prendra ces paramtres
lorsqu'ils ne seront pas dfinis dans l'entre JSON.
(function($) {
$.fn.exemple =function(options) {
var defaults ={
title: "",
selectEvent: null
};
var opts = $.extend(defaults, options);
return $(this);
};
})(jQuery);
http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://plugins.jquery.com/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/http://www.developpez.net/forums/member.php?u=29897http://www.developpez.com/8/6/2019 Creer Son Plugin jQuery
4/6
Crer un plugin jQuery : une liste droulante personnalise parPierre Schwartz (retour aux articles)
- 4 -Copyright 2009 - Pierre Schwartz. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 Ede dommages et intrts.
http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/
La fonction $.extendse charge de rcuprer les paramtres par dfaut si ces paramtres ne sont pas fournis lafonction. En passant "options" notre fonction de plugin, puis en rcuprant les paramtres effectifs via $.extend, onobtient un second jeu de paramtres not opts dans le code. C'est ce jeu de paramtres qu'il conviendra d'utilisertout au long de notre plugin.
III - Ralisation d'une liste droulante personnalise
Je choisis de me baser sur une liste HTML compose de balises ulet lipuis de la transformer en une liste droulantecompose d'une zone affichant l'option slectionne puis d'une zone dite droulante proposant toutes les options
de la liste.
Le plugin s'appellera directement sur les lments ul : $("ul").customDropDown(); L'utilisateur pourra paramtrerle texte affich la cration de la liste, quand aucune option n'est encore slectionne, ainsi qu'une fonction
personnalise appeler chaque slection d'option. Ces 2 paramtres sont nots title et selectEvent.
Nous ne savons pas sur combien d'objets jQuery le plugin sera appel, il faudra donc penser en premier lieu sparer
tous les lments pour crer une liste droulante sur chacun.
Le principe de la transformation de la liste est le suivant
On cre une zone affichant l'option slectionne.
On cre une zone contenant tous les lments de la liste. On positionne un vnement clic sur chaque lment slectionnable de manire le reporter dans la
premire zone.
On met en place un attribut value permettant de rcuprer simplement l'option choisie.
Si vous placez une telle liste droulante dans un formulaire, sa valeur ne sera pas envoyelors de la soumission du formulaire. Pour cela vous allez devoir crer un lment avec la valeur de l'lment slectionn.
Le clic sur la premire zone servira drouler et enrouler la liste selon qu'elle est dj droule ou non. Nous aurons
besoin de stocker un boolen reprsentant cet tat. J'ai choisi de le stocker dans $.data. Notez qu'on aurait pu stockercette information directement dans le DOM mais le stockage dans une structure de donnes dcouple du DOM
est plus propre.
III-1 - Code
(function($) {
//Dfinition du plugin
$.fn.imgDropDown =function(options) {
// dfinition des paramtres par dfaut var defaults ={
title: "",
selectEvent: null
};
// mlange des paramtres fournis et des paramtres par dfaut
var opts = $.extend(defaults, options);
// cration d'une liste
function createList(f){
// crer la premire zone, affichant l'option slectionne
var cell = $(''+ opts.title +'');
// crer la seconde zone, affichant toutes les options
var dropdown = $('');
$(this).find("li").each(function(){
dropdown.append($('')
http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/http://www.developpez.net/forums/member.php?u=29897http://www.developpez.com/8/6/2019 Creer Son Plugin jQuery
5/6
Crer un plugin jQuery : une liste droulante personnalise parPierre Schwartz (retour aux articles)
- 5 -Copyright 2009 - Pierre Schwartz. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 Ede dommages et intrts.
http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/
.click(onSelect)
.attr("value", $(this).attr("value"))
.append($(this).html())
.hover(function(){$(this).addClass("dropdownOptSelected");},
function(){$(this).removeClass("dropdownOptSelected");})
);
});
// on masque la zone droulante
dropdown.hide();
$.data(cell,"visible",false);
// on remplace la balise ul par notre liste personnalise
$(this).after(dropdown);
$(this).after(cell);
$(this).remove();
// on positionne l'vnement de droulage de la liste
cell.click(function(){
// si la liste est droule
if ($.data(cell,"visible")){
dropdown.slideUp("fast");
$.data(cell,"visible",false);
}else{dropdown.slideDown("fast");
$.data(cell,"visible",true);
}
});
// fonction appele chaque slection d'un lment
function onSelect(){
cell.html($(this).html());
cell.attr("value", $(this).attr("value"));
dropdown.slideUp("fast");
$.data(cell,"visible",false);
// appel d'une fonction personnalise
if
(opts.selectEvent)opts.selectEvent($(this));
}
}
// cration d'une liste droulante personnalise pour tous les lments de l'objet jQuery
$(this).each(createList);
// interface fluide
return $(this);
};
})(jQuery);
Voici un exemple d'appel :
Allemagne
Belgique
Espagne
France
Italie
Suisse
functionf(){
alert('clic');
}
$("ul").customDropDown({title:"Pays", selectEvent:f});
http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/http://www.developpez.net/forums/member.php?u=29897http://www.developpez.com/8/6/2019 Creer Son Plugin jQuery
6/6
Crer un plugin jQuery : une liste droulante personnalise parPierre Schwartz (retour aux articles)
- 6 -Copyright 2009 - Pierre Schwartz. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 Ede dommages et intrts.
http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/
L'attribut value des lments sera repris dans la zone personnalise, il conviendradonc de penser le renseigner.
III-2 - CSS
Aucun style n'est dfini dans le plugin, uniquement des classes CSS : dropdownCell, dropdownPanel, dropdownOptet dropdownOptSelected. Voici un exemple de style qui ne rend pas trop mal :
/* la zone affichant l'option slectionne */
.dropdownCell{
border:1pxsolid#bbb;
width:150px;
height:23px;
cursor:pointer;
font-family: arial;
font-size:10pt;
max-height:23px;
background:transparenturl('arrow.gif') righttopno-repeat;
}
.dropdownCell img{
margin:0px3px0px3px;
vertical-align:middle;
width:24px;
}
.dropdownPanel{
border:1pxsolid#bbb;
width:150px;
position:absolute;
}
.dropdownOpt{
background-color:#fff;
cursor:pointer;
font-family: arial; font-size:10pt;
}
.dropdownOpt img{
margin:0px3px0px3px;
vertical-align:middle;
width:24px;
}
.dropdownOptSelected{
background-color:#ccc;
}
IV - Rsultat, conclusion
Voici une dmonstration de ce que vous pouvez obtenir . N'hsitez pas modifier le style si vos lments de liste
ne sont pas tous similaires.
Tlcharger le code source de ce plugin
Merci l'quipe de la rubrique JavaScript de developpez.com pour sa relecture et ses remarques toujours aussi
pertinentes.
http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/jquery-dropdown.jshttp://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/jquery-dropdown.jshttp://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/jquery-dropdown.jshttp://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/jquery-dropdown.jshttp://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/jquery-dropdown.jshttp://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/jquery-dropdown.jshttp://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/jquery-dropdown.jshttp://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/jquery-dropdown.jshttp://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/jquery-dropdown.jshttp://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/jquery-dropdown.jshttp://www.developpez.com/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/jquery-dropdown.jshttp://khayyam.developpez.com/articles/web/javascript/jquery/plugin//demo/http://khayyam.developpez.com/articles/web/javascript/jquery/plugin/http://khayyam.developpez.com/http://www.developpez.net/forums/member.php?u=29897http://www.developpez.com/