2 つの選択リストがあり、その間で選択したオプションを移動できます。右側のリストでオプションを上下に移動することもできます。
オプションを左側のリストに戻すとき、リストに元のオプションがいくつか欠けていても、リストの順序で元の位置を維持したいと思います。これは、リストをユーザーにとってより便利にするためだけのものです。
現在、元の Select リスト onload を使用して配列を定義しています。
これを実装する最良の方法は何ですか?
2 つの選択リストがあり、その間で選択したオプションを移動できます。右側のリストでオプションを上下に移動することもできます。
オプションを左側のリストに戻すとき、リストに元のオプションがいくつか欠けていても、リストの順序で元の位置を維持したいと思います。これは、リストをユーザーにとってより便利にするためだけのものです。
現在、元の Select リスト onload を使用して配列を定義しています。
これを実装する最良の方法は何ですか?
元の順序を配列に保存し、挿入するときに、挿入する要素の前にある配列内の最新の要素が何であるかを判断し、現在選択リストにあるものと一致します。その後に挿入します。
より良い解決策は、古い配列全体を保存し、次のように必要な要素を挿入するたびに再入力することです (警告: コードはテストされていません)
function init(selectId) {
var s = document.getElementById(selectId);
select_defaults[selectId] = [];
select_on[selectId] = [];
for (var i = 0; i < s.options.length; i++) {
select_defaults[selectId][i] = s.options[i];
select_on[selectId][i] = 1;
var value = list.options[i].value;
select_map_values[selectId][value] = i if you wish to add/remove by value.
var id = list.options[i].id; // if ID is defined for all options
select_map_ids[selectId][id] = i if you wish to add/remove by id.
}
}
function switch(selectId, num, id, value, to_add) { // You can pass number, value or id
if (num == null) {
if (id != null) {
num = select_map_ids[selectId][id]; // check if empty?
} else {
num = select_map_values[selectId][value]; // check if empty?
}
}
var old = select_on[selectId][num];
var newOption = (to_add) : 1 : 0;
if (old != newOption) {
select_on[selectId][num] = newOption;
redraw(selectId);
}
}
function add(selectId, num, id, value) {
switch(selectId, num, id, value, 1);
}
function remove(selectId, num, id, value) {
switch(selectId, num, id, value, 0);
}
function redraw(selectId) {
var s = document.getElementById(selectId);
s.options.length = 0; // empty out
for (var i = 0; i < select_on[selectId].length; i++) {
// can use global "initial_length" stored in init() instead of select_on[selectId].length
if (select_on[selectId][i] == 1) {
s.options.push(select_defaults[selectId][i]);
}
}
}
アイテムを正しい場所に戻すことができるように、アイテムに昇順の値を割り当てます。割り当てられた値は、どのリストにあるかに関係なく、アイテムに残ります。