Cách tiếp cận của tôi hơi khác một chút.
Thay vì sửa đổi Selects trong nhân bản, tôi chỉ theo dõi từng select
trên trang cho change
sự kiện, và sau đó, nếu giá trị được thay đổi tôi thêm cần thiết selected
thuộc tính để chọn <option>
để nó trở thành <option selected="selected">
. Vì lựa chọn hiện được đánh dấu trong đánh dấu của <option>
, nó sẽ được chuyển khi bạn sẽ .clone()
nó.
Mã duy nhất bạn cần:
//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
});
Và bây giờ, bạn có thể sao chép chọn bất kỳ cách nào bạn muốn và nó sẽ có giá trị nó sao chép quá.
$("#my-select").clone(); //will have selected value copied
Tôi nghĩ rằng giải pháp này là ít tùy chỉnh do đó bạn không cần phải lo lắng nếu mã của bạn sẽ phá vỡ nếu bạn sẽ sửa đổi một cái gì đó sau này.
Nếu bạn không muốn nó được áp dụng cho tất cả các lựa chọn trên trang, bạn có thể thay đổi selector trên dòng đầu tiên như:
$(document).on("change", "select.select-to-watch", function(){
Nếu tôi sử dụng val() trên đối tượng lựa chọn thử nghiệm thất bại cũng như: \t thử nghiệm ("bản sao nên giữ lại giá trị của chọn", function() { \t \t var chọn = $ ("
Đó là khá lạ, gây ra điều này làm việc cho tôi trong IE 6/7, Firefox 3 và Opera 9. Có lẽ một cái gì đó sai với chức năng 'bằng' của bạn? cảnh báo (eval ('select = $ ("