2012-01-01 13 views
0

私は、ページのリストから選択したリストを選択し、追加/削除ボタンを追加しました。 jQueryのjavascriptのは簡単で、うまく機能:私は私のサーバーに「選ばれた」リストの内容を提出したいリストの内容(jQueryによって変更されたもの)をHTML形式で提出するにはどうすればよいですか?

function add(){ 
    $('#pool option:selected').each(function() { 
      $('#chosen').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>"); 
     $(this).remove(); 
    }); 
}); 
function remove(){ 
    $('#chosen option:selected').each(function() { 
      $('#pool').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>"); 
     $(this).remove(); 
    }); 
}); 

リストをフォームに配置しようとしました。フォームを送信すると、実際に「選択済み」リストのアイテムを選択しない限り、サーバーは何も受信しません。

スニペットは次のとおりです。 < action action = "URL" method = "POST" onsubmit = "preSubmit(); > ...

function preSubmit(){ 
$('#chosen').each(function(){ 
    $(this).attr("selected","selected"); 
}); 
}; 

うまくいかない! 「選択済み」リストのアイテムをサーバーに配信するにはどうすればよいですか?

答えて

1

$(this).attr("selected","selected");は、一度にoptionにのみ適用できます。ループのあらゆる段階で効果的にオーバーライドしています。

あなたのHTMLを十分に提供していないが、これは何が必要多かれ少なかれする必要があります:

function preSubmit() 
{ 
    var form = $('#chosen').closest('form'); 

    $('#chosen option').each(function() 
    { 
     form.append('<input type="hidden" name="' + $(this).val() + '" value="' + $(this).text() + '" />'); 
    }); 
}; 

P.S.セレクタをキャッシュすることを検討してください。

(最近のバージョンのjQueryを使用している場合は)attrの代わりにpropを使用する必要があります。

+0

ありがとう@ジョセフ、私はセレクタに 'オプション'を含めることがあなたの答えの最も重要な部分を取った。私は元のコード(選択された属性を有効にする)を維持していました。私はあなたの提案に応じて、対応する隠しフィールドを追加する利点を検討します。 – adaj21

関連する問題