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
答案 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中设置配置选项
它不完美,因为你必须对某些值进行硬编码,但你可以为通配符添加一个新的全局默认变量,它应该可以工作
我希望这有助于将来登陆这里的人们。