【问题标题】:Tags input with Bootstrap not working使用 Bootstrap 输入的标签不起作用
【发布时间】:2017-11-30 00:00:54
【问题描述】:

我正在尝试使用引导程序来掌握标签输入功能,但显然我错过了一些东西!我尝试严格按照文档进行操作,但未能正常工作——输入总是显示为值列表,而不是标签。所以我尝试复制一个明显有效的 JS fiddle 示例,但是当我将代码复制到我的代码编辑器时,同样的事情发生了。我相信我已经包含了对所需库的所有引用,但显然做错了。这是我的测试代码:

$(document).ready(function() {
  $('#defaultForm')
    .find('[name="cities"]')
    // Revalidate the color when it is changed
    .change(function(e) {
      console.warn($('[name="cities"]').val());
      console.info($('#aa').val());
      console.info($("#aa").tagsinput('items'));
      var a = $("#aa").tagsinput('items');
      console.log(typeof(a));
      console.log(a.length);
      $('#defaultForm').bootstrapValidator('revalidateField', 'cities');
    })
    .end()
    .find('[name="cities1"]')
    // Revalidate the color when it is changed
    .change(function(e) {
      console.warn($('[name="cities1"]').val());
      console.info($('#aa1').val());
      console.info($("#aa1").tagsinput('items'));
      var a = $("#aa1").tagsinput('items');
      console.log(typeof(a));
      console.log(a.length);
      $('#defaultForm').bootstrapValidator('revalidateField', 'cities1');
    })
    .end()
    .bootstrapValidator({
      excluded: ':disabled',
      feedbackIcons: {
        valid: 'glyphicon glyphicon-ok',
        invalid: 'glyphicon glyphicon-remove',
        validating: 'glyphicon glyphicon-refresh'
      },
      fields: {
        cities: {
          validators: {
            notEmpty: {
              message: 'Please enter at least one city you like the most'
            }
          }
        },
        cities1: {
          validators: {
            callback: {
              message: 'Please choose 2-4 color you like most',
              callback: function(value, validator) {
                // Get the selected options
                var options = validator.getFieldElements('cities1').tagsinput('items');
                // console.info(options);
                return (options !== null && options.length >= 2 && options.length <= 4);
              }
            }
          }
        }
      }
    })
    .on('success.form.bv', function(e) {
      // Prevent form submission
      e.preventDefault();
    });
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-validator/0.5.3/css/bootstrapValidator.min.css">

<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-validator/0.5.3/js/bootstrapValidator.min.js"></script>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css">

<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta/js/bootstrap.min.js"></script>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.css">

<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.js"></script>



<form id="defaultForm" method="post" class="form-horizontal">
  <div class="form-group">
    <label class="col-lg-3 control-label">Cities</label>
    <div class="col-lg-5">
      <input type="text" name="cities" id="aa" class="form-control" value="Amsterdam,Washington,Sydney,Beijing,Cairo" data-role="tagsinput" />
    </div>
  </div>
  <div class="form-group">
    <label class="col-lg-3 control-label">Cities 1</label>
    <div class="col-lg-5">
      <input type="text" name="cities1" id="aa1" class="form-control" value="Amsterdam1,Washington1,Sydney1,Beijing1,Cairo1" data-role="tagsinput" />
    </div>
  </div>
  <div class="form-group">
    <div class="col-lg-5 col-lg-offset-3">
      <button type="submit" class="btn btn-default">Validate</button>
    </div>
  </div>
</form>

任何指针都将不胜感激,因为这让我发疯!!!

【问题讨论】:

  • 如果它帮助您解决问题,请标记答案。

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


【解决方案1】:

我相信我已经包含了对所需的所有引用 图书馆,但显然做错了什么。

第一部分不正确,第二部分正确。

您没有添加对libraries 的所有引用,因为您缺少主要的

  1. jquery 所有脚本都依赖的库。
  2. 我发现您正在使用带有下拉菜单的 bootstrap,它们需要 popper.js 才能正常工作,如果您在 console 中按 F12 注意到您将收到错误消息

未捕获的错误:引导下拉菜单需要 Popper.js (https://popper.js.org)

所以你应该在期望它正常工作之前包含所有依赖项,并且对于包含来自CDN 链接的popper,不要包含除umd 版本之外的任何其他版本,因为当使用其他版本的CDN 链接时问题见here,你应该按以下顺序加载你的脚本,它会工作的

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-validator/0.5.3/css/bootstrapValidator.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.13.0/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-validator/0.5.3/js/bootstrapValidator.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.js"></script>

【讨论】:

  • 谢谢!刚刚根据您的回答使用参考文献进行了尝试,但是现在它的行为非常奇怪。我输入我的文本并按 Tab,我的输入就消失了。显然已经做了一些事情,因为现在应该占用输入的空间,但是标签不可见 - 只是空白
  • @DaveB1 这可能是您正在使用的引导源。它具有白色背景的.label-info 类,将您的自定义类添加到头部或自定义CSS 文件中,并在bootstrap.min.css 之后加载它。我建议您使用bootstrap 3 而不是4.0 beta,您无需执行任何操作,请参阅BOOTSTRAP 3 DEMO
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
相关资源
最近更新 更多