jQuery & Objects, essayant de créer un widget léger
-
09-06-2019 - |
Question
J'essaie de créer un "contrôle" de sélection générique auquel je peux ajouter dynamiquement des éléments, mais j'ai du mal à faire fonctionner correctement les fonctions.
C'est avec ça que j'ai commencé.
$select = $("<select></select>");
$select.addOption = function(value,text){
$(this).append($("<option></option>").val(value).text(text));
};
Cela a bien fonctionné seul mais à tout moment $select
est .clone(true)
'ed le addOption()
la fonction est perdue.
C'est mon approche objet mais la fonction ne fonctionne toujours pas.
function $selectX() {
return $("<select></select>");
}
$selectX.prototype.addOption() = function(value,text){
$(this).append($("<option></option>").val(value).text(text));
};
La solution Hack consiste à ajouter la fonction manuellement après la création :
$nameSelect= new $selectX;
$nameSelect.addOption = function(value,text){
$(this).append($("<option></option>").val(value).text(text));
};
Est-ce que je me trompe d'arbre ?
La solution
Pour ajouter une nouvelle méthode à jQuery, vous devez utiliser jQuery.fn.methodName
attribut, donc dans ce cas ce sera :
jQuery.fn.addOption = function (value, text) {
jQuery(this).append(jQuery('<option></option>').val(value).text(text));
};
Mais gardez à l'esprit que ceci addOption
sera accessible à partir du résultat de tout $()
appel.