13

select2 バージョン 4.0 を使用しています。Ajax 呼び出しからデータを取得する選択ボックスをプログラムで選択しようとしています。

ドキュメントでは、プログラムで値を通常のselect2に設定する方法を見つけましたが、ajax selectでこれを行う方法がわかりません。

私の記憶が正しければ、古いバージョンでは、次のコマンドで select2 にデータを渡すことで現在の値を設定できました。

jQuery("selectbox").select2("data", data)

私はこれを試し、id、text、および結果を含むデータ オブジェクトを送信しましたが、何も表示されず、選択ボックスのステータスを照会して選択した値を確認すると、null が返されます。

このオプションは削除されましたか、それとも単に変更されましたか? ドキュメントのどこでこれを見つけることができますか、またはどうすれば望ましい動作を達成できますか?

4

4 に答える 4

8

これを実現する唯一の方法は、最初に<option>選択したいデータを選択DOMに追加し、その後すぐに、通常の選択ボックスで行うように選択することです。これは、github プロジェクト ページでの kevin-brown からの公式の回答でもありました。

https://github.com/select2/select2/issues/3273

したがって、基本的に、何を選択したいかわかっている場合は、そこ<option>から要素を簡単に作成し、元の選択ボックスに追加して、その値で選択できます。

var option=jQuery("<option>").attr("value","your_id_here").html("your_text_here");
jQuery("selectbox").append(option);
jQuery("selectbox").val("your_id_here").trigger("change");
于 2015-10-08T11:56:27.883 に答える
4

これに対する完全な答えも知りたいのですが、部分的な解決策は次のとおりです。

$('#select2-control-id').val('item-id').trigger('select2:select').trigger('change');

これは、select2が要求しているアイテムをすでにロードしている場合にのみ機能するようです。つまり、すでにクリックしたアイテムです。

ドロップダウンを手動で開いて、AJAX 経由でアイテムの最初のページをロードする必要があるだけでなく、後でプログラムで選択するページを実際にクリックする必要もあります。

これは、実際にクリックしたときに<options>基になる要素にのみ追加されるためと思われます。select

select2AJAX 結果の最初のページを読み込むようにプログラムで指示する方法がわかりません。

于 2015-10-08T02:12:32.210 に答える
1

隠し<select/>ボックスは次のように簡単に操作できます。

//set first option as selected 
$("select [value='0']").attr("selected","selected");
$("select").trigger("change");

デモ

于 2015-10-14T20:28:31.410 に答える
0

これを試すことができます。

    var dataString = 'id='+$value;
    var promise = sendAjaxFunction('load_form.php?k=1',dataString);
    $("#LoadMachine").html("<img src='images/ajax-loader.gif' />");
    promise.success(function (data) {
        $("#LoadMachine").html(data);
        $("#MachineName").select2({
            placeholder: 'Select Operation Name ...',
            allowClear: true
        });
        return false;
    });

Div #LoadMachine にデータをロードすると、select2 をロードできます。

于 2015-10-14T07:01:31.963 に答える