javascript - 如何在输入字段中使用 bootstrap 4 制作芯片

标签 javascript jquery bootstrap-4

我正在尝试使用下拉列表创建和输入字段,下拉列表中的输入字段为 type=email 我正在从数据库中获取邮件 ID,我正在尝试执行此操作是当用户单击任何下拉菜单时,它会填充到该输入字段中,但下拉菜单不应关闭,因为它是一个多选下拉菜单,当用户从下拉菜单中聚焦时,它会关闭

当用户选择任何下拉菜单时,应选择或选中该选项

在该输入字段中,当我们输入多个邮件 ID 时,它可以作为芯片或 token 出现在 gmail 中

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.bundle.min.js"></script>


<div class="input-group mt-3 mb-3">

  <input type="email" class="form-control" placeholder="mail id">
  <div class="input-group-prepend">
    <button type="button" class="btn btn-outline-secondary dropdown-toggle" data-toggle="dropdown">
     Email id
    </button>
    <div class="dropdown-menu">
      <a class="dropdown-item" href="#">abc@gmail.com</a>
      <a class="dropdown-item" href="#">egf@gmail.com</a>
      <a class="dropdown-item" href="#">123@gmail.com</a>
    </div>
  </div>
</div>

并且在输入字段中,电子邮件应以chips形式出现

最佳答案

var selected = [];
var availableTags = [
	"abc@gmail.com",
	"abc1@gmail.com",
	"abc2@gmail.com",
	"abc3@gmail.com",
	"abc4@gmail.com"
 ];
	
  $( function() {
    $("#tags").autocomplete({
      source: availableTags,
      select: function( event, ui){
        var value = ui.item.value;
        selected.push(value);
        refreshDiv();
        var i = availableTags.indexOf(value);
        availableTags.splice(i, 1);
        event.preventDefault();
        $("#tags").focusout();
        $("#tags").val('');
      }
    });
  });
  
  function refreshDiv(){
	$("#emails").val(selected.join(','));
	  var email_html = selected.map(function(f, i){
		return "<span class='btn btn-info btn-sm' style='margin: 3px;'>"+f+"&nbsp;&nbsp; <span onclick=\"removeEmail('"+f+"')\" style='color:red'>x</span></span>";
	});
	  $("#email-html").html(email_html);
  }
  
  function removeEmail(email){
    availableTags.push(email);
	  var i = selected.indexOf(email);
	  selected.splice(i, 1);
	  refreshDiv();
  }
  
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Autocomplete - Default functionality</title>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css">
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
	<div class="row">
		<div class="col-md-3">
			<div id="email-html"></div>
			<input type="hidden" name="emails" id="emails"/>
		</div>
		<div class="col-md-3">
			<div class="ui-widget">
			  <input id="tags">  
			</div>
		</div>
	</div>
</body>
</html>

关于javascript - 如何在输入字段中使用 bootstrap 4 制作芯片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55275193/

相关文章:

Javascript - 如何在不显示文本区域的情况下将文本复制到剪贴板?

javascript - switch/case 总是返回默认值

jquery - 从查询错误中进行多项选择

css - Bootstrap 4轮播空间向右

javascript - Bootstrap Tooltip 动态值 取决于是否需要填写

javascript - 为什么这个函数不能多次保存信息?

Javascript 错误 - 无法在未定义上运行 .split

javascript - 如何结合 jQuery UI 对话框标题更改和在一个函数调用中打开

jquery - 页面加载时滚动到顶部 (HTML)

javascript - 如果未设置 php session 变量,如何在窗口加载时打开 bootstrap4 弹出窗口?