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 ?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top