4

我正在尝试为 bootstrap 3 实现TagInput但是当我尝试初始化它时,它给了我一个错误Uncaught TypeError: Property 'undefined' of object #<TagsInput> is not a function

这是我如何调用脚本

<script src='<?php echo base_url() ?>resources/js/jquery-1.7.2.min.js' type='text/javascript'></script>

<script src='<?php echo base_url() ?>resources/js/bootstrap.js' type='text/javascript'></script>

<script src='<?php echo base_url() ?>resources/js/bootstrap-tagsinput.js' type='text/javascript'></script>

<script> $('.tagplayer').tagsinput();</script>

形式

<input type="text" class="tagplayer">

编辑:我目前不再使用这个插件,我需要建议接受正确的答案。

4

3 回答 3

8

我遇到了同样的问题。可能作者修改后忘记测试了。打开bootstrap-tagsinput.js,在最后一行可以看到如下代码;

   $(function() {
       $("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput();
   });

如您所见,在这段 js 代码中,调用了tagsinput()函数。因此,包括您tagsinput()在代码中的调用,有 2 次调用tagsinput().

结果,在第 357 行,将tagsinput()函数注册为 jquery 插件,初始化失败。

为了解决这个问题,注释上面的代码。(但也许你可以使用一些功能,但并不重要

无论如何,您也需要包括在内bootstrap-tagsinput.css

于 2013-10-08T06:47:58.607 回答
2

在 GitHub 上查看此问题:https ://github.com/TimSchlechter/bootstrap-tagsinput/issues/52

一个对我有帮助的解决方法:

<input type="text" id="tags">
<script>
    var tags = $('#tags')
    tags.tagsinput();

    tags.tagsinput('input').typeahead({
      prefetch: 'prefetch.json'
    }).bind('typeahead:selected', $.proxy(function (obj, datum) {
      tags.tagsinput('add', datum.value);
      tags.tagsinput('input').typeahead('setQuery', '');
    }, $('input')));
</script>
于 2013-11-20T05:19:27.810 回答
0

我在选择正确的插件时也遇到了问题。最后我自己实现了taginput,不难。代码 :

HTML:

<p>Tags : </p><input type="text" name="irrelevant" id="tags" placeholder="add tag">

JavaScript(JS):

var id=1;
function remove(id) {
    var element = document.getElementById(id);
    element.parentNode.removeChild(element);
}

function addTag(e,name) {
    if (!e) e = window.event;
    var keyCode = e.keyCode || e.which;
    var entry=document.getElementById(name);
    entry.value=entry.value.toLowerCase();
    if (keyCode == '8' && entry.value.length==0) {
        if (entry.previousSibling.className=="btn btn-secondary margin") {
            entry.previousSibling.parentNode.removeChild(entry.previousSibling)
        }
        return;
    } 
    if (keyCode != '13' || !/[a-z]$/.test(entry.value) || document.getElementById(name+"_"+entry.value) != null) {
        return;
    }
    var id;
    var btn = document.createElement("button");
    var t = document.createTextNode(entry.value); 
    btn.appendChild(t);
    btn.setAttribute("id",name+"_"+entry.value)
    btn.className="btn btn-secondary margin"
    btn.setAttribute("onclick","remove('"+name+"_"+entry.value+"')")

    var insertedNode = entry.parentNode.insertBefore(btn, entry);
    entry.value=""
}
document.getElementById('tags').onkeypress=function(e) { addTag(e,"tags"); }

基本上,您只是检查是否按下了键并且条目的格式正确,并相应地在条目之前添加标签,这些标签只是按钮。只使用纯 JS。

于 2018-08-24T08:10:58.363 回答