3

私はこの答えのようなことをしようとしています: https://stackoverflow.com/a/6256910/1641189

ただし、スクロールバーがあるため、複数選択フィールドで実行したいと考えています。

上記の回答リンクのように、各アイテムをクリックするとすぐに移動する代わりに、2 つの選択フィールドの間に 2 つのボタンを配置します。

このようなもの: http://www.kj4ohh.com/stuff/selectfields.png

  1. javascript/jqueryでこれを行うにはどうすればよいですか?
  2. 両方の選択フィールドの内容をフラスコ アプリケーションに戻すにはどうすればよいですか?

編集:

次のJavaScriptを試しました:

function assign(form)
{
   for(i=0;i<form.unassigned.length;i++) {
      if (form.unassigned.options[i].selected == true) {
         form.assigned.add(form.unassigned.options[i]);
         form.unassigned.remove(i);
      }
   }
   //unselect all items
   form.assigned.selectedIndex = -1
}

function unassign(form)
{
   for(i=0;i<form.assigned.length;i++) {
      if (form.assigned.options[i].selected == true) {
         form.unassigned.add(form.assigned.options[i]);
         form.assigned.remove(i);
      }
   }
   //unselect all items
   form.unassigned.selectedIndex = -1
}

しかし、奇妙な結果で:

このスクリプトを使用すると、いずれかの選択フィールドから項目を選択し、適切な割り当て/割り当て解除ボタンを押すと、正しく機能します。

2 つの項目を選択すると、1 つのみが移動されます。

2 つ以上を選択すると、1 つが移動し、1 つがそのまま残り、残りは消えます。

ただし、監視されている現在の選択を出力する alert() 行を追加すると、正しく選択された各項目に対して警告ボックスが生成されます。

4

2 に答える 2

3

より良い結果を得るには、jquery プラグインを使用する必要があります

http://loudev.com/

于 2012-09-03T02:40:26.233 に答える
0

あなたはこれを試すことができます

​$(function(){
    $('#toSel1, #toSel2').on('click', function(){
        if($(this).attr('id')=='toSel2')
        {
            var l=$('#sel1 option:selected').length;
            if(!l) { 
                alert("Option not selected !");
                return false;
            }
            $('#sel1 option:selected').each(function(){
                $('#sel2').append($(this));
            });
        }
        else
        {
            var l=$('#sel2 option:selected').length;
            if(!l) { 
                alert("Option not selected !");
                return false;
            }
            $('#sel2 option:selected').each(function(){
                $('#sel1').append($(this));
            });
        }
    });
});​

デモ

于 2012-09-03T00:01:44.840 に答える