我使用下面的jQuery在表單中選擇元素進行排序:jQuery在頁面刷新時選擇排序更改顯示選項。發生了什麼?
$('select.select-sortable').each(function() {
var options = $(this).children();
var arr = options.map(function(_, o) { return { t: $(o).text(), v: o.value }; }).get();
arr.sort(function(o1, o2) { return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0; });
options.each(function(i, o) {
o.value = arr[i].v;
$(o).text(arr[i].t);
});
});
排序的作品,但在每一個頁面刷新顯示值的變化。無論有多少選項存在,它都會按照第1個選項 - >第3個選項 - >第2個選項 - >第1個選項的順序進行更改。
我已將$(this).children(":first").attr("selected", true);
添加到循環中,它將選項鎖定到第一個選項,但我仍不明白dsiplay爲什麼會發生更改,以及爲什麼按此順序。有沒有人有任何想法?
你的if語句似乎有問題。當我包含它時,它會停止分揀機的運作。 – evanjdooner
不知道爲什麼它不會工作,但我已經改變了條件來檢查未定義的值。 http://jsbin.com/opuzot/1/edit – vsr
我認爲問題在於你的函數在頁面加載時保留了選擇,但是它沒有設置初始選擇的值。 要澄清,選項的值和文本字段略有不同,以便具有按字母順序排列的文本的選項不是初始默認選擇,具有按字母順序排列的值的選項是。這是應用「selected」屬性的值,因此即使列表按文字按字母順序排序,它也是第一個「已選」值。 – evanjdooner