2016-05-24 6 views
0

次のコードを使用して、select2(バージョン2.5.3)ウィジェットにデータを動的に読み込みます。フォーカスとアイドル中にselect2の内容を更新する

var arr = []; 
$.ajax(...); // Load data into the array 

hiddenInput.select2({ 
    data: { results: arr } 
}); 

私はウィジェットの検索フィールドに集中していた場合ならば、新しいデータのみが現れる:私は離れてクリックして、再度

  • を集中

    1. 私はフィールドに入力を開始hiddenInput.val()を呼び出す

    は何もしない、とhiddenInput.change()またはhiddenInput.trigger('change.select2')を呼び出すと、ドロップダウンを閉じて、任意の入力したテキストを取り除きます。

    ユーザーが何もしなくても、ウィジェットの状態をリセットしなくてもデータを更新できるようにするにはどうすればいいですか(たとえば、検索フィールドを閉じたり消去したりしないでください。

  • +0

    正確に達成しようとしていることはありますか?なぜあなたはこれをする必要がありますか?ユーザーがフォーカスしている間にデータが変更されるのはなぜですか? – Miro

    +0

    @Miro ajax呼び出しを使用してデータをロードしています。このロードには2〜2秒かかります。この間、「一致するものは見つかりませんでした」というテキストは「読み込み中」と表示されます。ユーザーは、ロードが完了する前に検索ボックスにアクセスし、できるだけ早く検索を開始できるようにします。検索フィールドをクリックしても何も入力しないと、データが既に読み込まれているにもかかわらず、結果ボックスには「読み込み中」と表示され続けます。私はselect2ウィジェットがこれを認識し、それに応じてディスプレイを更新したい。 – idlackage

    +0

    はい。私はそれを得る。しかし、なぜユーザーが集中した後にデータをロードしなければならないのですか?そうすれば、ユーザーがフォーカスしている間は更新する必要はありません。例:https://jsfiddle.net/mirohristov/h2trn161/2/ – Miro

    答えて

    0

    ウィジェットにデータが変更されたことを反映させるための一時的な解決策が見つかりました。基本的には、検索フィールドに何かを入力する動作をエミュレートするだけです。

    var searchField = hiddenInput.data("select2").search; 
    if (searchField.is(":focus")) { 
        var searchTerm = searchField.val(); 
        hiddenInput.select2("search", ""); 
        hiddenInput.select2("search", searchTerm); 
    } 
    

    これは非常に「きれいな」仕事のようには見えないので、より適切なものが来るまでこれを最終的な解決策として受け入れることを断るつもりです。

    関連する問題