Disable other groups, when select an item

时间:2015-05-24 21:30:00

标签: jquery html css magicsuggest

I search for a way to disable other groups in magicsuggest, when you select an item.

Example from the magicsuggest page (http://nicolasbize.com/magicsuggest/data.json): When I select an item from the group "United States", let's say "Chicago", it shall disable the elements from the other group "France" or even don't show them anymore.

Thanks in advance

1 个答案:

答案 0 :(得分:0)

好,因为这是谷歌的最佳结果(对于" magicsuggest禁用组"),这是我的解决方案:
我在" magisuggest.js":中扩展了以下几行的API 在默认列表中(第22行++)我添加了2个变量:

safeArray: "",
removeInactiveGroups: false,

第一个是存储原始数据的变量
第二个在设置为true时触发事件

然后你必须去功能" _onComboItemSelected"并在最后添加一个新行:

handlers._disableUnusedGroups();

然后在我写下新功能:

    _disableUnusedGroups: function(){
        if(cfg.removeInactiveGroups){
            var list_ = ms.getData();
            if(cfg.safeArray==""){
                cfg.safeArray=list_;
            }
            var test2 = JSON.stringify(ms.getSelection());
            test2 = test2.split(":");
            test2 = test2[test2.length-1];
            var res = test2.substr(1,test2.length-4);
            var testarray = [];
            $.each(list_, function(a,b){
            //WILDCARD = the name of the group, in the example above it would
            //be "country"
                if(b[WILDCARD]==res){ 
                    testarray.push(b);
                }
            });
            ms.setData(testarray);
        }
    },

重要的是,带有组的名称是json对象中的最后一个值! (我没有找到另一种方法来获取所选项目的组名而不是上面所示)
这会添加用于将新项目添加到所选列表的处理程序 现在你只需要扩展处理程序" _onTagTriggerClick"当最后一行删除元素时触发:

if(ms.getSelection()["length"] == 0 && cfg.removeInactiveGroups){
    ms.setData(cfg.safeArray);
}

这将只恢复选择容器中的原始列表

好了,现在添加处理程序来删除和添加项目,现在我们必须扩展在程序开始时触发的处理程序(如果设置了值):
处理程序以
开头 " if(element!== null){"
这个函数现在这样找我:

if(element !== null) {
self._render(element);
if(cfg.value!==null){
    var check = cfg.value[0];
    var list_ = ms.getData();
    var searchItem;
    var newList_ = [];

    if(cfg.safeArray==""){cfg.safeArray=list_;}

    $.each(list_, function(a,b){
        //WILDCARD2 = the name of the elements, in the example above it
        //would be "name"
        if($.trim(b[WILDCARD2]) == check){
        //WILDCARD = the name of the group, in the example above it would
        //be "country"
            searchItem=b[WILDCARD];
        }
    });

    $.each(list_, function(a,b){
        if(b[WILDCARD]==searchItem){
            newList_.push(b);
        }
    })
    ms.setData(newList_);
}
}

现在你必须添加一行

removeInactiveGroups: true,

在您自己的javscript中设置配置选项
它不完美,因为你必须对某些值进行硬编码,但你可以为通配符添加一个新的全局默认变量,它应该可以工作

我希望这有助于将来登陆这里的人们。