簡體   English   中英

搜索在動態引導多選中不起作用

[英]Search Not Working In Dynamic Bootstrap Multiselect

我正在使用http://davidstutz.github.io/bootstrap-multiselect/在我的網頁中創建引導多重選擇控件。

我想要使​​用動態數據實現以下帶有靜態數據的小提琴鏈接:

https://jsfiddle.net/DROCKS/mrmLrsad/4/

//please refer the fiddle

如果選擇框的值是靜態的,則搜索選項可以正常工作,但是如果它們是動態創建的,則將創建多選。 但是,搜索過濾器在這種情況下不起作用。 但是我的代碼與下面的小提琴相似,唯一的區別是搜索過濾器部分在我的實際代碼中不起作用,但在此小提琴中起作用。

提要鏈接與動態數據。 https://jsfiddle.net/DROCKS/mrmLrsad/5/

//please refer the fiddle

這是我的代碼。 HTML代碼

<select id="lstFieldList" ></select>

jQuery代碼[更新]:

function uncheckFields(field_id)
{
    $('#' + field_id).multiselect('deselectAll', true);
}

//json_obj is the value from the fiddle.

createMultiSelectBox(json_obj);

//this function creates the multiselect
function createMultiSelectBox(json_obj)
{
    var element_String = "";
    var default_ele_set = 0;
    var def_element_first = "1";                            //if the first Y flag should be considered
    var def_element_last = "n";                             //if the last Y flag should be considered
    var def_element = def_element_first;            //change the value here to toggle between default selection
    var tmp = [];

    for (var key in json_obj)
    {
        var val = json_obj[key];
        //alert("Key: " + key);

        var chk_box_ctr = 0;
        var element;

        for(var child_key in val)
        {
            //alert("key: " + child_key + "\nvalue: " + val[child_key]);

            var default_value = child_key.split(",")[7];

            //alert("default_value: " + default_value);

            if(!chk_box_ctr)
            {
                g_max_PageSize = child_key.split(",")[8];
                //alert("g_max_PageSize: " + g_max_PageSize);
            }

            if(def_element == def_element_first)
            {
                if(default_value == "Y" && !default_ele_set)
                {
                    //element_String += '<option value="' + child_key + '" selected="selected">' + val[child_key] + '</option>';
                    element = {"label": val[child_key],"value":child_key};
                }
                else
                {
                    //element_String += '<option value="' + child_key + '">' + val[child_key] + '</option>';
                    element = {"label": val[child_key],"value":child_key};
                }
            }
            else
            {
                if(default_value == "Y")
                {
                    //element_String += '<option value="' + child_key + '" selected="selected">' + val[child_key] + '</option>';
                    element = {"label": val[child_key],"value":child_key};
                }
                else
                {
                    //element_String += '<option value="' + child_key + '">' + val[child_key] + '</option>';

                    element = {"label": val[child_key],"value":child_key};
                }
            }
            tmp.push(element);
        }

        if(def_element == def_element_last)
        {
            uncheckFields('lstFieldList');
        }
    }

    //$('#lstFieldList').append(element_String);

    //$('#lstFieldList').multiselect('rebuild');

    $("#lstFieldList").multiselect('dataprovider', tmp);

    $('#lstFieldList').multiselect({
        maxHeight: 200,
        buttonWidth:"100%",
        enableFiltering:true,
        enableCaseInsensitiveFiltering:true,
        /*maxHeight: 200,
        enableCaseInsensitiveFiltering: true,
        //enableFiltering: true,
        onChange: function(option, checked, select) {
            alert('Changed option ' + $(option).val() + '.' + "\nchecked: " + checked + "\nselect: " + select);

            if(checked)
            {
                //uncheckFields('lstFieldList');
            }
            else
            {
                uncheckFields('lstFieldList');
            }
        }*/
    });

    var elem = $('#lstFieldList').next();
    elem.attr('class',(elem.attr('class') + ' open'));
}

可能是什么問題呢? 因為兩個文件中都存在相同的代碼。

任何幫助,將不勝感激。

提前致謝。

創建一個數組var tmp = [];

像這樣在循環選擇時創建一個json

element = {"label": this.Name,"value":this.id};

並將每個元素推送到tmp

tmp.push(element);

並將此tmp數組傳遞給多選

$("#lstFieldList").multiselect('dataprovider', tmp);

並在下拉列表中添加多選

 $("#lstFieldList").multiselect({
                              maxHeight: 260,
                              buttonWidth:"100%",
                              enableFiltering:true,
                              enableCaseInsensitiveFiltering:true,
                            });

我實際上是在與引導多選插件相關的代碼中找出導致異常行為的原因。 Anoop給我的代碼是正確的,在過去的幾個月中,我還嘗試了與同一個插件相關的各種不同代碼,但后來我放棄了使用該插件的想法。

然后上周晚些時候,當使用相同的代碼進行工作時,我發現我在html頁面中包含了一些js腳本文件。 因此,我嘗試注釋掉html中文件的每個include語句,以識別引起問題的文件。 因此,在這樣做時,我到達了特定的js文件。

識別文件后,我只需要找出是哪個函數導致了插件的建議邏輯出現問題。 因此,為了確定這一點,我一直在評論/刪除功能,直到到達導致問題的功能為止。 有一個與window.setTimeout相關的代碼。 由於此功能,當代碼進入此塊時,現有的建議邏輯無法正常工作。 因此,我后來添加了一些標記邏輯,以避免在我的情況下運行此功能。

非常感謝您的輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM