2016-07-12 97 views
0

我想问一下如何将magicsuggest附加到多个动态元素上? 有没有人以前做过?在动态元素上附加magicsuggest

赫雷什的情况下,每次i型“逗号”或命中“输入”它应该创建与2个输入与magicsuggest每一个面板。所以,如果我输入:

1 towel, 2 plates 

它应该创建2个面板与2输入每个与magicsuggest。

上述情况已经完成,但现在的问题是,当它加载所有magicsuggest输入它总是集中在第一个输入。我可以选择其他人,但始终专注于第一个。

我试过这段代码,但无济于事。

var ms = {}; 
for(var i = 1; i <= 2; i++){   

    ms[i] = $('#text_area_request_'+i).magicSuggest({ 
     id: "request_id_" + i, 
     name: "request_id[" + i + "]", 
     allowFreeEntries: false,    
     width: 350, 
     maxSelection: 1,  
     data: ["Wifi", "Steak", "Food", "Water"],   
    }); 

} 

感谢

回答

0

首先,你已经忘记了在数据键(“水”])的最后一个逗号所有。

如果你删除它,仍然无法正常工作..你可以尝试以下..

创建功能attachMagicSuggest(“text_area_request_0”),这将作为参数要与填充输入ID数据。

每次你创建一个新的面板(或者你所说的任何东西),都可以运行这个函数。

function attachMagicSuggest(inputId){ 

    var ms1 = $('#'+inputId).magicSuggest({ 
    placeholder: 'Select a cuisine', 
    allowFreeEntries: false,    
    width: 350, 
    maxSelection: 1,  
    data: ["Wifi", "Steak", "Food", "Water"] 
    }); 

} 
0

我不完全确定你的意思是什么,但也许问题是你每次都引用同一个对象。确保每次循环都使用不同的对象。 magicSuggest的返回值不能直接附加到另一个jQuery对象,所以我不得不使用类似这样的功能:

function buildMagicSuggest(id, options, setValue) { 
    var $input = $('<input>', {id: id, class: 'form-control'}); 
    var data = []; 
    for (var i = 0; i < options.length; i++) { 
     if (options[i] === null) { 
      continue; 
     } 
     var name = options[i] === '' ? '&nbsp;' : options[i]; 
     data.push({id: options[i], name: name}); 
    } 
    var magic = $input.magicSuggest({ 
     placeholder: '', 
     allowFreeEntries: true, 
     selectPositions: 'bottom', 
     selectionStacked: false, 
     maxDropHeight: 145, 
     maxSelection: 1 
    }); 
    magic.setData(data); 
    setValue && magic.setValue([setValue]); 
    return magic.container; 
} 

然后你就可以使用这个功能是这样的:

$('#the-form').append(buildMagicSuggest(
    inputId, 
    ["Wifi", "Steak", "Food", "Water"], 
    "Wifi" 
)); 

关键是找到包含整个控件(容器)的magicSuggest对象的正确属性。