【问题标题】:Width override of easyAutocomplete plugin inside input-group-addon输入组插件内easyAutocomplete插件的宽度覆盖
【发布时间】:2018-06-30 01:35:04
【问题描述】:

我在表单中有一个输入框。我在这个输入框中使用了easyautocomplete插件。当我在input-group-addon 之外有输入框时,输入框的宽度合适。但是,当我在input-group-addon 中添加它时,宽度会减小/折叠。 (见截图)

HTML input-group-addon

<div class="form-group col-md-9">
  <label for="taskname">Task Name</label>
  <div class="input-group">
    <span class="input-group-addon"><i class="fas fa-anchor"></i></span>
    <input class="form-control" id="taskname" name="taskname" required autocomplete="off" maxlength="50" placeholder="Name" value="<?php echo h($dataset['taskname']); ?>">
  </div>
  <small class="form-text text-muted">Select Task name from auto suggestion or type your own </small>
</div>

HTML 没有 input-group-addon

<div class="form-group col-md-9">
  <label for="taskname">Task Name</label>
    <input class="form-control" id="taskname" name="taskname" required autocomplete="off" maxlength="50" placeholder="Name" value="<?php echo h($dataset['taskname']); ?>">
  <small class="form-text text-muted">Select Task name from auto suggestion or type your own </small>
</div>

Javascript

$("#taskname").easyAutocomplete(tasknameoption);
var tasknameoption = {
  url: "/task/tasklistapi.php",
  getValue: "tasklistname",
  adjustWidth: false,
  requestDelay: 500,
  list: {
    maxNumberOfElements: 10,
    match: {enabled: true},
    onSelectItemEvent: function() {
      var value = $("#taskname").getSelectedItemData().iscomp;
      $("#iscomp").val(value).trigger("change");
    }
  }
};

当上面的javascript被注释时,表单如下所示

我尝试过的事情(但没用):

  1. 根据Github在选项中添加adjustWidth: false
  2. 根据SOSO 添加了inline CSS

【问题讨论】:

    标签: css twitter-bootstrap bootstrap-4 easyautocomplete


    【解决方案1】:

    实际上比这更容易。 只需将类添加到初始化程序。 示例:

    var options = {
        data: ["Cyclops", "Storm", "Mystique", "Wolverine", "Professor X", "Magneto"],
        theme: "dark", **cssClasses: 'col'**
    };
    $("#theme").easyAutocomplete(options);
    

    【讨论】:

      【解决方案2】:

      显然,EasyAutocomplete 插件将&lt;input class="form-control"&gt; 包装成一个额外的&lt;div class="easy-autocomplete"&gt; 元素。通过该修改,它破坏了正确input-group 样式所需的引导标记。不幸的是,我没有找到 EasyAutocomplete 的选项来控制它如何更改 DOM

      为了克服这个问题,我可以想到两种解决方法。

      • 您可以修改 Bootstrap css 来处理新的标记。最简单的方法是将修改后的 scss 文件重新编译成一个新的 css。但是,这也可能导致容易出错的结果。
      • 不过,第二种选择是使用 javascript 进一步修改标记。

      我认为后一种方法是最简单的方法,因此我在下面的示例中进行了演示。

      // Init `easyAutocomplete`
      var tasknameoption = {
          adjustWidth: false,
          data: ["blue", "green", "pink", "red", "yellow"]
      };
      $("#taskname").easyAutocomplete(tasknameoption);
      
      // Fixing markup
      $('.easy-autocomplete').closest('.input-group').each(function(i, inputGroup) {
          $(inputGroup).removeClass('input-group');
          $autocomplete = $(inputGroup).find('.easy-autocomplete');
          $(inputGroup).find('.input-group-addon').prependTo($autocomplete);
          $autocomplete.addClass('input-group');
      });
      .easy-autocomplete-container {
          top: 100%;
      }
      <div class="form-group col-md-9">
          <label for="taskname">Task Name</label>
          
          <div class="input-group">
              <span class="input-group-addon"><i class="fa fa-anchor"></i></span>
              <input class="form-control" id="taskname" name="taskname" required autocomplete="off" maxlength="50" placeholder="Name">
          </div>
      
          <small class="form-text text-muted">Select Task name from auto suggestion or type your own </small>
      </div>
      
      
      <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" rel="stylesheet"/>
      <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
      <link href="https://cdnjs.cloudflare.com/ajax/libs/easy-autocomplete/1.3.5/easy-autocomplete.css" rel="stylesheet"/>
      <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/easy-autocomplete/1.3.5/jquery.easy-autocomplete.js"></script>

      根据您的初始标记,我猜您使用的是 Bootstrap 4 Beta 2。重要的是要注意 Beta 3 可用,并且更改还包括输入组组件的样式。因此,对于最新的 beta 版本,标记和“重置”脚本如下所示。

      // Init `easyAutocomplete`
      var tasknameoption = {
          adjustWidth: false,
          data: ["blue", "green", "pink", "red", "yellow"]
      };
      $("#taskname").easyAutocomplete(tasknameoption);
      
      // Fixing markup
      $('.easy-autocomplete').closest('.input-group').each(function(i, inputGroup) {
          $(inputGroup).removeClass('input-group');
          $autocomplete = $(inputGroup).find('.easy-autocomplete');
          $(inputGroup).find('.input-group-prepend').prependTo($autocomplete);
          $autocomplete.addClass('input-group');
      });
      .easy-autocomplete-container {
          top: 100%;
      }
      <div class="form-group col-md-9">
          <label for="taskname">Task Name</label>
          
          <div class="input-group">
              <div class="input-group-prepend">
                  <span class="input-group-text" id="basic-addon1">
                      <i class="fa fa-anchor"></i>
                  </span>
              </div>
      
              <input class="form-control" id="taskname" name="taskname" required autocomplete="off" maxlength="50" placeholder="Name" aria-describedby="basic-addon1">
          </div>
      
          <small class="form-text text-muted">Select Task name from auto suggestion or type your own </small>
      </div>
      
      
      <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" rel="stylesheet"/>
      <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
      <link href="https://cdnjs.cloudflare.com/ajax/libs/easy-autocomplete/1.3.5/easy-autocomplete.css" rel="stylesheet"/>
      <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/easy-autocomplete/1.3.5/jquery.easy-autocomplete.js"></script>

      注意:正如您在示例中看到的,仍然需要为 EasyAutocomplete 选项设置 adjustWidth: false。此外,还修复了 .easy-autocomplete-container 类以正确显示。

      【讨论】:

      • 如果页面上只有一个自动完成文本框,您的代码可以完美运行。当我有超过 1 个时它不起作用。对此有何建议?我现在正在使用最新的稳定 4.0 版本的引导程序。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多