/* jQuery drop down plugin Copyright (C) 2009 Schwartz Pierre This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ (function($) { //Définition du plugin $.fn.imgDropDown = function(options) { // définition des paramètres par défaut var defaults = { onSelectCallback: null, onDropdownCallback: null, onDropupCallback: null }; // mélange des paramètres fournis et par défaut var opts = $.extend(defaults, options); // création d'une liste function createList(f){ // créer la première zone, affichant l'option sélectionnée var cell = $(""); // créer la seconde zone, affichant toutes les options var dropdown = $(""); $(this).find("li").each(function(){ dropdown.append($("") .click(onSelect) .attr("value", $(this).attr("value")) .append(""+$(this).html()+"") ); }); // on masque la zone déroulante dropdown.hide(); $.data(cell, "visible", false); // on remplace la balise ul par notre liste personnalisée $(this).after(dropdown); $(this).after(cell); $(this).remove(); // on positionne l'évènement de déroulage de la liste cell.click(function(){ // si la liste est déroulée if ($.data(cell, "visible")){ dropdown.slideUp("fast"); $.data(cell, "visible", false); if(opts.onDropupCallback){opts.onDropupCallback();} }else{ dropdown.slideDown("fast"); $.data(cell, "visible", true); if(opts.onDropdownCallback){opts.onDropdownCallback();} } }); // fonction appelée à chaque sélection d'un élément function onSelect(){ cell.html($(this).html()); cell.attr("value", $(this).attr("value")); dropdown.slideUp("fast"); $.data(cell, "visible", false); // appel d'une fonction personnalisée if (opts.onSelectCallback) opts.onSelectCallback($(this).attr("value")); } } // création d'une liste déroulante personnalisée pour tous les éléments de l'objet jQuery $(this).each(createList); // interface fluide return $(this); }; })(jQuery);