0

選択値は私を混乱させています。ユーザーがアプリで行を編集すると、jquery (empty-X と呼ばれる) を使用してタグを複製し、それをモーダル ウィンドウに配置して、ユーザーが値を編集できるようにします。同時に、サーバーから json オブジェクト (データ) を取得し、モーダル ウィンドウの現在のフィールドをデータベースにそのまま入力します。

empty_X.find('#id_deals-1-currency').val(data[0].fields['currency']);

モーダルが表示されると、ユーザーはドロップダウンで正しい通貨がどのように選択されているかを確認できます。

しかし、この要素の HTML を Firebug でチェックすると、別の画像が表示され、何も選択されていないようです。

<select id="id_deals-1-currency" name="deals-1-currency">
 <option selected="selected" value="">---------</option>
 <option value="1">USD - $</option>
 <option value="2">EUR - €&lt;/option>
 <option value="3">GBP - £</option>
</select>

それでも、フォームをサーバーに送信すると、検証エラーは発生せず、通貨は以前に val() で設定した値と同じです。人生は素晴らしい。

これはそれ自体で機能しますが、問題があります。ユーザーが編集モードに戻り、通貨を保存する前にもう一度確認したい場合はどうすればよいでしょうか?

この場合、データベースから値をロードできなくなります。彼の以前のローカル変更は今重要です。ユーザーが以前に変更した内容を確認して確認できるように、現在のレコードをモーダル ウィンドウ内の通貨を使用して複製する必要があります。問題は、前のステップで変更した通貨がユーザーに表示されないことです。実際、代わりに空のドロップダウンが表示されます。

ここでのオプションは何ですか? selectedを使用するのではなく、フラグを実際の選択に設定する方法はありval()ますか?

4

1 に答える 1

1

のクローンを作成する<select>と、'selected' 属性を持つオプションが、実際の現在のオブジェクトではなく、クローン オブジェクトの現在のオプションになります (value 属性による)。

これに対抗するには、によって返された値から現在選択されているオプションを見つけて、val()クローンを作成する前に、選択した属性をそれに適用します。この方法では、クローン作成後に値を設定する必要はありません。

デモ: http://jsfiddle.net/DqADq/

コード: (.x1<select>)

// simple cloning
$('.x1:first').clone().appendTo('.out');

// setting selected attr before cloning
var v = $('.x1:first').val();
$('.x1:first option').removeAttr('selected'); // remove 'selected' from all options
$('.x1:first option').each(function() {
    if($(this).attr('value') == v)  {
        $(this).attr('selected', true); // apply 'selected' to current option
    }
});
$('.x1:first').clone().appendTo('.out');
于 2012-12-20T13:09:19.703 に答える