Mon approche est un peu différente.
Au lieu de modifier au cours du clonage choisit, je suis en train de regarder tous les select
à la page pour l'événement change
, puis, si la valeur est modifiée ajouter nécessaire selected
attribut sélectionné <option>
il devient <option selected="selected">
. Comme la sélection est maintenant marquée dans le balisage <option>
, elle sera transmise lorsque vous l'aurez .clone()
.
Le seul code dont vous avez besoin:
//when ANY select on page changes its value
$(document).on("change", "select", function(){
var val = $(this).val(); //get new value
//find selected option
$("option", this).removeAttr("selected").filter(function(){
return $(this).attr("value") == val;
}).first().attr("selected", "selected"); //add selected attribute to selected option
});
Et maintenant, vous pouvez copier sélectionner comme vous le souhaitez et il va avoir sa valeur copiée aussi.
$("#my-select").clone(); //will have selected value copied
Je pense que cette solution est moins personnalisée de sorte que vous n'avez pas besoin de vous inquiéter si votre code cassera si vous allez modifier quelque chose plus tard.
Si vous ne voulez pas à appliquer à tous les sélectionner à la page, vous pouvez changer de sélection sur la première ligne comme:
$(document).on("change", "select.select-to-watch", function(){
Si j'utilise le val() sur l'objet, sélectionnez le test échoue ainsi: \t test ("clone doit conserver les valeurs de sélection", function() { \t \t var select = $ (»
C'est assez bizarre, parce que cela fonctionne pour moi dans IE 6/7, Firefox 3 et Opera 9. Peut-être que quelque chose ne va pas avec votre fonction 'égale'? alerte (eval ('select = $ ("