Bootstrap-TagsInput confirmKeys不起作用

时间:2015-12-24 14:29:52

标签: javascript jquery html typeahead.js bootstrap-tags-input

我无法获得默认的Bootstrap-TagsInput confirmKeys,即enter = 13comma = 188,以便开箱即用。无论有没有Typeahead.js,都是如此。确认键允许您通过单击该键创建标记。

我认为问题在于标签是字符串还是对象。如果您查看the Tagsinput demo,“预先输入”示例允许使用默认confirmKeysentercomma创建标记,但在其下方的“对象作为标记”示例没有。

知道如何让confirmKeys使用对象标签吗?

2 个答案:

答案 0 :(得分:2)

我必须编辑Bootstrap-tagsinput库才能使其正常工作。

以下是我在库中添加/注释的内容:

 //self.options.freeInput = false; //notice commented out

//... (lots of lines between)

if (self.options.freeInput && (keyCombinationInList(event, self.options.confirmKeys) || maxLengthReached)) {
    // Only attempt to add a tag if there is data in the field

    if (text.length !== 0) {
       //<<<<< BEGIN code block added
       //self.add(maxLengthReached ? text.substr(0, self.options.maxChars) : text); //notice commented out

       var item2 = self.$input.val();
       if (self.objectItems) {
         var beforeFreeInputItemAdd = $.Event('beforeFreeInputItemAdd', { item: item2, cancel: true });
         self.$element.trigger(beforeFreeInputItemAdd);
         if (beforeFreeInputItemAdd.cancel)
           return;

         item2 = beforeFreeInputItemAdd.item;
       }

       self.add(item2);
       self.$input.val(''); 
       //  $input.val(''); //>>>>>> END code block added
    }

}

然后在一个想要使用这个库修改的代码库中的任何地方我添加了这个:

var id_increment = 1;
$("#my-tagsinput-field").on('beforeFreeInputItemAdd', function(event) {

    event.item = {'name': event.item, 'id': 'new-'+id_increment};
    event.cancel = false;
    id_increment++;

});

答案 1 :(得分:0)

对我来说,解决方案是在配置中有 freeInput,例如

$( 'input[type="tags"]' ).tagsinput(
{
    typeaheadjs: [{
        minLength: 1,
        highlight: true
    },
    {
        limit: 99,
        name: type,
        displayKey: 1,
        valueKey: 'name',
        source: sourcefunc,
        templates: { suggestion: suggestionsfunc }
    }],
    freeInput: true
});

并在tagsinput源代码中将以下内容更改为false

cancelConfirmKeysOnEmpty: false,

这是我的第 24 行。