0

私のページには asmselect を使った複数選択がありますが、これは素晴らしく機能します。

ページに別の複数選択を追加しようとしていますが、問題が発生しています。asmselect jquery コードでリスト全体をループしているため、約 11,000 のオプションがあり、asmselect のロードに永遠に時間がかかります。読み込み時間を改善できたとしても、ユーザーがリスト全体を調べてオプションを見つけるのは簡単ではありません。

私の考えは、ダイアログをポップアップするボタンを追加することでした (リストを選択するためのオプションを追加するために、ページの他の場所でダイアログを正常に使用しています)。ユーザーはフィルター情報を入力し、フィルターされたリストから選択できます。そこで、101 と入力すると、「10100」、「22101」、「31015」などのオプションがリストされます。「10100」を選択します。選択すると、メイン画面に「10100」が表示されます。次に、もう一度ボタンを押して「105」と入力すると、新しいフィルタリングされた選択リストが表示され、メイン画面に「10100」とともに表示される「10500」が選択されます。

最初の質問、これを処理するより良い方法はありますか?

次に、asmselect の書式設定を使用して、新しく選択した項目を表示し、他の asmselect の書式設定と一致するようにし、項目の選択を解除するための「削除」で組み込み機能を使用できますか。asmselect のコードを見ていますが、私の jquery の知識は非常に限られており、理解できません。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

0

droplistFilter プラグインを使用して、ダイアログにオプションのドロップダウン リストを表示することで、これを実現しました。ドロップダウンからオプションを選択し、ダイアログの「追加」ボタンをクリックすると、オプションが複数選択に追加され (asmselect プラグインを使用)、選択済みに設定され、ドロップダウン リストからオプションが無効になりました。私の$(document).ready(function() {場合、複数選択で選択した各オプションをドロップダウンで無効に設定しました。

        $('#Vendor_IDs').asmSelect({
            sortable: false
        });
        $('#vendor').droplistFilter();
        $('#Vendor_IDs option:selected', this).each(function () {
            $("#vendor option[value='" + $(this).val() + "']").attr("disabled", true);
        });

        $('#popupAddVendor').dialog(
        {
            autoOpen: false,
            modal: true,
            width: 600,
            buttons:
            {
                'Add': function () {
                    var v = $('#vendor').val();
                    if (v.length > 1) {
                        $('#Vendor_IDs').append($('<option></option>').val(v).html($('#vendor option:selected').text()).attr("selected", true));
                        $('#Vendor_IDs').change();
                        $('#vendor option:selected').attr("disabled", true).attr("selected", false);
                        $('#vendor').attr('selectedIndex', 0);
                    }
                    $(this).dialog('close');

                },
                'Cancel': function () {
                    $(this).dialog('close');
                }
            }
        });
于 2011-03-01T20:46:15.503 に答える