【问题标题】:Call show.bs.modal event before parent event在父事件之前调用 show.bs.modal 事件
【发布时间】:2017-06-21 11:42:36
【问题描述】:

我有一个引导按钮(我使用引导程序 4),它打开一个模态并通过函数将按钮中的数据传输到模态中的表单:

$('#exampleModal').on('show.bs.modal', function (event).

按钮位于 div(父级)中。 当我单击按钮时,父事件在子事件之前调用。 我不希望运行父事件。 我只需要打开弹出模式。 当我尝试先通过 onclick 调用打开按钮但数据未传输时。 这是我的代码示例:codepen

这是html

<div class="row">
  <div class="col-12 parent">
    I'm the parent!
    <div class="child">
      I'm the child
      <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal"       data-whatever="@mdo" data-message="@test message" >Open modal </button>

    </div>
  </div>
</div>



<!-- Bootstrap Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">New message</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <form>
          <div class="form-group">
            <label for="recipient-name" class="form-control-label">Recipient:</label>
            <input type="text" class="form-control" id="recipient-name">
          </div>
          <div class="form-group">
            <label for="message-text" class="form-control-label">Message:</label>
            <textarea class="form-control" id="message-text"></textarea>
          </div>
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Send message</button>
      </div>
    </div>
  </div>
</div>

这是脚本

<script>
$(".parent").click(function(event){
  alert("Parent event");
})


/*
if I add this function I cant transfer the data that in the button
$(".child").click(function(event){
  alert("Child event");
  event.stopPropagation();
  $('#exampleModal').modal('show');
})*/



$('#exampleModal').on('show.bs.modal', function (event) {
  alert("btn event");
  var button = $(event.relatedTarget) // Button triggered the modal
  var recipient = button.data('whatever')
  var message = button.data('message') 
  var modal = $(this)
  modal.find('.modal-title').text('New message to ' + recipient)
  modal.find('.modal-body input').val(recipient)
  modal.find('.modal-body textarea').val(message)
})
</script>

【问题讨论】:

    标签: javascript jquery bootstrap-modal bootstrap-4 stoppropagation


    【解决方案1】:

    在父点击中很简单,检查target是否不同于buttondata-target='#exampleModal',所有这些都使用.is() jquery函数,如下所示:

    //get reference to the button 
    var $button = $("button[data-target='#exampleModal']");
    $(".parent").click(function(event){
      if (!$(event.target).is($button)) { // be sur button was'nt clicked
        alert("Parent event");
      }
    })
    

    Updated Pen

    请参阅下面的工作 sn-p :

    var $button = $("button[data-target='#exampleModal']");
    
    $(".parent").click(function(event){
      if (!$(event.target).is($button)) {
        alert("Parent event");
      }
    })
    
    
    
    $('#exampleModal').on('show.bs.modal', function (event) {
      alert("btn event");
      var button = $(event.relatedTarget) // Button triggered the modal
      var recipient = button.data('whatever')
      var message = button.data('message') 
      var modal = $(this)
      modal.find('.modal-title').text('New message to ' + recipient)
      modal.find('.modal-body input').val(recipient)
      modal.find('.modal-body textarea').val(message)
    })
    body {
      background-color: #a3d5d3;
    }
    
    .col-12{ background:red; height:100px;}
    .child{background:white;}
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
    <div class="row">
      <div class="col-12 parent">
        I'm the parent!
        <div class="child">
          I'm the child
          <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal"       data-whatever="@mdo" data-message="@test message" >Open modal </button>
    
        </div>
      </div>
    </div>
    
    
    
    <!-- Bootstrap Modal -->
    <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <h5 class="modal-title" id="exampleModalLabel">New message</h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
              <span aria-hidden="true">&times;</span>
            </button>
          </div>
          <div class="modal-body">
            <form>
              <div class="form-group">
                <label for="recipient-name" class="form-control-label">Recipient:</label>
                <input type="text" class="form-control" id="recipient-name">
              </div>
              <div class="form-group">
                <label for="message-text" class="form-control-label">Message:</label>
                <textarea class="form-control" id="message-text"></textarea>
              </div>
            </form>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
            <button type="button" class="btn btn-primary">Send message</button>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

    • 我的荣幸.. :)
    • 感谢您的回答,但我的问题是:在我的站点中,当我单击父项工作时,我需要父项中的所有其他子项。在您的解决方案中,它不适用于任何孩子。当所有其他孩子点击时,我需要父母的功能。看看我的example codepen。非常感谢
    • 不客气@EstyShlomovitz,所以请考虑将答案标记为已解决✓(留下答案):)
    • @bRIMOs 我做过 :)
    • @EstyShlomovitz Thnx :) .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    相关资源
    最近更新 更多