Search code examples
javascripthtmljquerybootstrap-modal

How to change Bootstrap modal content depending on button click


I need to be able to change the content inside a modal depending on the button that is clicked.

For instance, if button one is clicked it will only show the div with class 'one' and the others will remain hidden.

$('#exampleModalCenter').modal('toggle')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" class="btn" data-toggle="modal" data-target="#exampleModalCenter">one</button>

<button type="button" class="btn" data-toggle="modal" data-target="#exampleModalCenter">two</button>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">

<!-- jQuery library -->


<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>


<button type="button" class="btn" data-toggle="modal" data-target="#exampleModalCenter">three</button>

<!-- Modal -->
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <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="one">Button one content</div>
        <div class="two">Button two content</div>
        <div class="one">Button three content</div>
      </div>
    </div>
  </div>
</div>


Solution

  • Example below. The logic: Whenever you click a button, hide all the content first, then you show the specific content based on the button you clicked.

    Ref.: https://getbootstrap.com/docs/3.3/javascript/#modals-related-target

    $(".btn").click(function () {
      $(".parent").children().each(function () {
        $(this).hide();
      });
      $(`div.${$(this).attr("id")}`).show();
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <!-- Latest compiled and minified CSS -->
    <link
      rel="stylesheet"
      href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
    />
    
    <!-- jQuery library -->
    
    <!-- Latest compiled JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    <button
      id="one"
      type="button"
      class="btn"
      data-toggle="modal"
      data-target="#exampleModalCenter"
    >
      one
    </button>
    
    <button
    id="two"
      type="button"
      class="btn"
      data-toggle="modal"
      data-target="#exampleModalCenter"
    >
      two
    </button>
    
    <button
    id="three"
      type="button"
      class="btn"
      data-toggle="modal"
      data-target="#exampleModalCenter"
    >
      three
    </button>
    
    <!-- Modal -->
    <div
      class="modal fade"
      id="exampleModalCenter"
      tabindex="-1"
      role="dialog"
      aria-labelledby="exampleModalCenterTitle"
      aria-hidden="true"
    >
      <div class="modal-dialog modal-dialog-centered" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <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="parent">
              <div class="one">Button one content</div>
              <div class="two">Button two content</div>
              <div class="three">Button three content</div>
            </div>
          </div>
        </div>
      </div>
    </div>