6

私はこれを100回前に行ったことがありますが、この1つの例ではそれを機能させることができません。

フォームがあります。クライアントのドロップダウンから選択すると、フォームの残りのフィールドが更新されます。

シンプル。

ajax呼び出しを使用して、フォームデータをjsonオブジェクトとして返し、次のjqueryを使用して画面上のフォームを更新します。フィールドはname、出力定義(以下のようにk)と一致するように設定されます。

    $.each(out, function(k,v){
        if($('form input[name="'+k+'"]').attr('type') == 'text'){
            $('form input[name="'+k+'"]').val(v);
        }else if($('form input[name="'+k+'"]').attr('type') == 'hidden'){
            $('form input[name="'+k+'"]').val(v);
            $('form .'+k).text(v);
        }else if($('form input[name="'+k+'"]').attr('type') == 'checkbox'){
            if(v == '1') {
                $('form input[name="'+k+'"]').attr('checked', true);
            }else{
                $('form input[name="'+k+'"]').attr('checked', false);
            }
        }else
        $('form select[name="'+k+'"] option[value="'+v+'"]').attr('selected', true);

        $('form input[name="old_client_name"]').val(out.client_name);
    });

inspect要素を使用すると、1つの選択フィールドで正しいオプションに値が指定されていることが実際にわかりselected="selected"ますが、ユーザーのビューではこれを反映するように選択ボックスが更新されていないため、ユーザーはこれを選択済みとして表示できません。 、およびフォームの処理では、値が設定されていないように動作します。

私はjq1.9.1を使用していますが、この特定のプロジェクトでこれにアップグレードしたのはつい最近のことです。

助言がありますか?

4

4 に答える 4

6

試す:

    $('form select[name="'+k+'"] option[value="'+v+'"]').attr('selected', 'selected');

また:

    $('form select[name="'+k+'"] option[value="'+v+'"]').prop('selected', 'selected');

わかりやすくするために、trueだけでなく、常にselected="selected"を設定する必要があります。

于 2013-03-12T17:33:47.850 に答える
4

プラグインを使用している場合は、特定のドキュメントを参照してください。例:

select2の場合、以下を使用します。

$('#myselect').trigger('change');

selectmenuには、次を使用します。

$('#myselect').selectmenu('refresh', true);
于 2018-04-14T03:55:25.800 に答える
2

交換

.attr('selected', true);

にとって

.prop('selected', true);

これはjquery1.6.x+の新機能です

于 2013-03-12T17:35:50.580 に答える
1

完全を期すために、次の方法で確認することもできます。

$('form input[name="'+k+'"]:selected').length == 1
于 2013-03-12T17:53:29.293 に答える