リストボックスの値増減サンプル
移転しました。
ソースは未完成だけど、メモとして残しておくため記載。
リストボックス内の項目を、右から左に移動できたりする。
[追記]
通りすがりさんに指摘を受け、バグがあったので直す。
以下ソースをコピーしてHTMLで保存。jqueryを同じフォルダに準備してファイル名をあわせれば、動くはずです。
<!-- 確認フィールド --> <table border="0" cellspacing="1" cellpadding="3" class="search"> <tr> <td> <table> <tr> <td colspan="4"> テスト </td> </tr> <tr> <td> <img src="" alt="2上矢印" onclick="item_top_up()"/><br /> <img src="" alt="上矢印" onclick="item_up()"/><br /> <br /> <img src="" alt="下矢印" onclick="item_down()"/><br /> <img src="" alt="2下矢印" onclick="item_bottom_down()"/><br /> </td> <td> カテゴリ画面の表示商品<br /> <select multiple="multiple" size="10" name='add_list' id='add_list'> </select> <br /> ※左側の矢印を押下して表示順位を変更してください </td> <td> <button type="button" name="add" value="add" onclick="add_item()">←追加</button> <br /> <button type="button" name="del" value="del" onclick="del_item()">削除→</button> </td> <td> 非表示の商品<br /> <select multiple="multiple" size="10" name='del_list' id='del_list'> <option value='a'>Aaaaaaaaaa</option> <option value='b'>Bbbbbbbbbb</option> <option value='c'>Cccccccccc</option> <option value='d'>Dddddddddd</option> <option value='e'>Eeeeeeeeee</option> </select> <br /> ※複数選択できます </td> </tr> </table> </td> </tr> </table> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> <!-- // 表示リストに商品追加 function add_item() { common_item_move($('#add_list'), $('#del_list'), $('#del_list option:selected')); return false; } // 非表示リストに商品追加 function del_item() { common_item_move($('#del_list'), $('#add_list'), $('#add_list option:selected')); return false; } // 商品追加共通処理 function common_item_move(add_to_list, del_to_list, del_to_list_option){ // 1.表示リストに選択中のリストを取得 del_to_list_option.each(function() { // 2.非表示リストに1のリストを追加 add_to_list.append($('<option>').attr({ value: $(this).val() }).text($(this).text())); // 3.表示リストから1のリストを削除 del_to_list.children('[@value=' + $(this).val() + ']').remove(); }); } // 商品順番一番上に上げる function item_top_up(){ // indexが0のものを選択している場合は、何も行なわない if($('#add_list').children('[@index=0]').attr("selected")) return; // 選択 var move_num = 0; $('#add_list option:selected').each(function(i){ var index = $(this).attr("index"); if (index > 0){ var before = null; // 最初のループ if(i == 0){ before = $('#add_list').children('[@index=0]'); move_num = index; } else { var move_indx = $(this).attr("index") - move_num; before = $('#add_list').children( '[@index=' + move_indx + ']' ); } $(this).insertBefore(before); } }); } // 商品順番一番下に下げる function item_bottom_down(){ // indexが最下層のものを選択している場合は、何も行なわない var max_index = $('#add_list').children().length - 1; if($('#add_list').children('[@index=' + max_index + ']').attr("selected")) return; // 選択 var move_num = 0; var list_selected = []; $('#add_list option:selected').each(function(i){ list_selected.push($(this)); }); for(var i = list_selected.length - 1; i >= 0; i--){ var index = list_selected[i].attr("index"); if (index < max_index){ var after = null; // 最初のループ if(i == list_selected.length - 1){ after = $('#add_list').children('[@index=' + max_index + ']'); move_num = max_index - index; } else { var move_indx = list_selected[i].attr("index") + move_num; after = $('#add_list').children( '[@index=' + move_indx + ']' ); } list_selected[i].insertAfter(after); } } } // 商品順番上げる function item_up(){ // 選択 $('#add_list option:selected').each(function(){ var index = $(this).attr("index"); var current = $('#add_list').children('[@index=' + index + ']'); var before_index = -1; var before = $('#add_list').children('[@index=' + (index + before_index) + ']'); if(!before.attr("selected")){ current.insertBefore(before); } }); } // 商品順番下げる function item_down(){ // 選択 var list = $('#add_list option:selected'); for (i = list.length-1; i >= 0; i--) { var idx = jQuery(list[i]).attr('index'); var cur = $('#add_list').children('[@index='+idx+']'); var aft = $('#add_list').children('[@index='+(idx+1)+']'); if(!aft.attr('selected')){ aft.insertBefore(cur); } } } //--> </script>