JSFiddle - React, Tailwind, and code Playground

by John Pisello

HTML

<script src="https://code.jquery.com/jquery-3.4.1.slim.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.12/js/select2.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.12/css/select2.min.css">

<div class="container pt-3">
  <button class="btn btn-info btn-block" id="BtnSelect2First">Initialize Select 2 then Open Modal</button>
  <button class="btn btn-secondary btn-block" id="BtnDialogFirst">Open Modal then initialize Select 2</button>
</div>

<div id="DialogItemEdit" class="modal fade">
	<div class="modal-dialog">
		<div class="modal-content">
			<form method="POST">
				
				<div class="modal-header">
					<h4 class="modal-title">Item Edit</h4>
					<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
				</div>
				<div class="modal-body">
          <div class="form-group">
            <label for="inputItemId">Type</label>
            <!-- SELECT 2 INPUT -->
            <select id="inputItemId" class="select2 form-control item_type" name="item[type]" required data-placeholder="Choose a type">
              <option></option>
              <option value="house">House</option>
              <option value="building">Building</option>
              <option value="hut">Hut</option>
            </select>
          </div>
        </div>

				<div class="modal-footer">
					<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button>
					<button name="submitSave" type="submit" class="btn...

CSS

.row {
  background: #f8f9fa;
  margin-top: 20px;
}

.col {
  border: solid 1px #6c757d;
  padding: 10px;
}

JavaScript

function initializeSelect2($element) {
	$element = $($element);
  $element.select2({width: "100%"});
}

$(function() {

	var $DialogItemEdit = $("#DialogItemEdit").modal({show: false});
  var $selectInput = $DialogItemEdit.find('#inputItemId');
	$("#BtnSelect2First").click(function() {
  	initializeSelect2($selectInput);
  	$DialogItemEdit.modal('show');
  	return false;
  });
	$("#BtnDialogFirst").click(function() {
  	$DialogItemEdit.one('shown.bs.modal', function() {
  		initializeSelect2($selectInput);
    });
  	$DialogItemEdit.modal('show');
  	return false;
  });
  $DialogItemEdit.on('hide.bs.modal', function() {
  	$selectInput.select2('destroy');
  })

});