【问题标题】:Twitter Bootstrap 3 Typeahead / Tagsinput Completing TwiceTwitter Bootstrap 3 Typeahead / Tagsinput 完成两次
【发布时间】:2015-06-04 07:36:26
【问题描述】:

编辑:添加working JSFiddle

我正在使用带有 Bootstrap Typeahead 的 Twitter Bootstrap TagsInput。我的源是一个 json 文件,但这无关紧要,我已经检查了一个静态源。

typeahead 和 tagsinput 正在工作,但是当我按 enter、tab 或单击标签时,它会创建一个重复的完成。

每当我按下回车键或完成预先输入时,就会发生极端的“默认”。如果我通过用逗号分隔或将焦点从窗口移开来打破预输入,则不会发生。

这是输入:

<input id="itemCategory" type="text" autocomplete="off" class="tagsInput form-control" name="itemCategory">

这是脚本:

    <script>                        
        $('.tagsInput').tagsinput({
            confirmKeys: [13, 44],
            maxTags: 1,
          typeahead: {                  
            source: function(query) {
              return $.get('listcategories.php');
            }
          }
        });
    </script>

我敢肯定,我很幸运,这是无法重现的东西,所以我希望有人能掌握一些他们知道会导致这种情况发生的机构知识。

这是额外文本的图像,在 dev.工具:

我非常感谢任何意见或建议。谢谢。

工作代码

感谢@Girish,以下是“修复”此问题的原因。我认为这是一个错误,在更新版本的 jQuery 或 Typeahead 中引入。这段代码只是手动删除了额外的元素,尽管希望会出现一些东西来阻止它首先被放置在那里,从而消除额外的代码。现在它对我有用。

        $('.tagsInput').tagsinput({
            confirmKeys: [13, 44],
            maxTags: 1,
          typeahead: {                  
            source: function(query) {
              return $.get('tags.php');
            }
          }
        });
        $('.tagsInput').on('itemAdded', function(event) {
            setTimeout(function(){
                $(">input[type=text]",".bootstrap-tagsinput").val("");
            }, 1);
        });

【问题讨论】:

  • 你的 jsfiddle 不工作
  • @DhirajBodicherla 不工作是指不展示我的问题还是展示我的问题?
  • kobrien.me 中包含的文件面临net::ERR_INSECURE_RESPONSE 错误并且未在小提琴中加载。尝试包含来自某些 cdn 的文件
  • 你能推荐一种方法来为 jsfiddle 托管它们,它不会遇到这个问题吗?我的服务器证书是自签名的。
  • 尝试使用 rawgit.com 这肯定适用于 jsfiddle。只需将原始 js/css 文件粘贴到 rawgit.com 即可。 rawgit 会吐出 cdn.rawgit.com 的 url 可以包含在 jsfiddle 中

标签: jquery twitter-bootstrap typeahead bootstrap-tags-input


【解决方案1】:

我不确定这是不是错误,函数内没有自定义代码,但在输入字段中重复了选定的 标签,但您可以使用替代解决方案,itemAdded 事件来删除选定的值来自input 字段,请参见下面的示例代码。

$('input').tagsinput({
  typeahead: {
    source: ['Amsterdam', 'Washington', 'Sydney', 'Beijing', 'Cairo']
  },
  freeInput: true
});
$('input').on('itemAdded', function(event) {
    setTimeout(function(){
        $(">input[type=text]",".bootstrap-tagsinput").val("");
    }, 1);
});

我还注意到输入字段正在生成每个标签部分,因此 thisevent 不能成为目标标签输入字段,由于动态生成输入字段,您还需要延迟从 @ 选择输入元素987654327@

DEMO

更新 : $.get() 函数返回 xhr 对象而不是服务器响应,因此您需要添加 callback 方法来获取 AJAX 响应,请参见下面的示例代码。

$('.tagsInput').tagsinput({
      confirmKeys: [13, 44],
      maxTags: 1,
      typeahead: {                  
          source: function(query) {
            return $.get('listcategories.php').done(function(data){
              /*if you have add `content-type: application/json` in 
                server response then no need to parse JSON otherwise,
                you will need to parse response into JSON.*/
              return $.parseJSON(data);
            })
          }
      }
 });

【讨论】:

  • 不幸的是,我似乎无法使用从 JSON 中提取的我自己的数据集来使用它。
  • 我已将此标记为正确答案,因为我的赏金即将到期,我认为您应得的积分,但我认为问题尚未解决,可能是一个错误。谢谢你的帮助,@Girish。
  • 适用于添加情况,但不适用于重复情况(当标签已存在时)
【解决方案2】:

使用afterSelect 选项的不太冗长的解决方案:

$(".tags").tagsinput({
     typeahead: {
        afterSelect: function(val) { this.$element.val(""); },
        source: keywords
     }
});

【讨论】:

  • 发布后不久,我放弃了标签输入。太多的问题。相反,我选择了 Tagify,这是一个内置下拉菜单的 js/scss 解决方案。更干净,非常简单。
  • 感谢您提及 Tagify!阅读您的评论后,我切换到它,它更干净,更简单,而且错误更少。它使我的开发变得更加容易。谢谢!
  • 更好的解决方案。当第二次选择/输入相同的值时也可以工作。 @Girish 解决方案不适用于这种情况。
猜你喜欢
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多