2017-01-10 25 views
5

Tôi gặp sự cố với phương thức gần trong bootstrap. Khi tôi mở một cửa sổ phương thức với dữ liệu (Thay đổi nội dung phương thức dựa trên nút kích hoạt). Đây là ví dụ trong http://getbootstrap.com/javascript/#modalsNút đóng phương thức Bootstrap

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo">Open modal for @mdo</button> 
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@fat">Open modal for @fat</button> 
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@getbootstrap">Open modal for @getbootstrap</button> 
...more buttons... 

<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"> 
    <div class="modal-dialog" 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> 
     <h4 class="modal-title" id="exampleModalLabel">New message</h4> 
     </div> 
     <div class="modal-body"> 
     <form> 
      <div class="form-group"> 
      <label for="recipient-name" class="control-label">Recipient:</label> 
      <input type="text" class="form-control" id="recipient-name"> 
      </div> 
      <div class="form-group"> 
      <label for="message-text" class="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-default" id="btnclose" data-dismiss="modal">Close</button> 
     <button type="button" id="btnsend" class="btn btn-primary">Send message</button> 
     </div> 
    </div> 
    </div> 
</div> 

này là ok nhưng nếu tôi đóng modal và mở nút khác, khi nhấp chuột vào nút gửi in trong giao diện điều khiển đăng nhập giá trị nhận các phương thức đầu tiên và phương thức này. Nhưng tôi chỉ cần in giá trị người nhận cuối cùng. Tôi không hiểu lý do tại sao các sự kiện xếp chồng của chế độ trước đó gần gũi. Đây là mã jquery của tôi, cho cả hai nút:

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

    var button = $(event.relatedTarget) // Button that triggered the modal 
    var recipient = button.data('whatever') // Extract info from data-* attributes 
    // If necessary, you could initiate an AJAX request here (and then do the updating in a callback). 
    // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead. 
    var modal = $(this) 
    modal.find('.modal-title').text('New message to ' + recipient) 
    modal.find('.modal-body input').val(recipient) 

    $("#btnsend").one("click", function(){ 
     console.log('Pinchado') 
     console.log(recipient) 
    }) 

    $("#btnclose").one("click", function(){ 
     console.log('Cerrando...') 
    }) 

    $('#exampleModal').on('hidden.bs.modal', function (e) { 
     console.log('Cerrada'); 
    }) 

    }) 

Cảm ơn bạn rất nhiều và tôi hy vọng mọi người có thể giúp tôi. https://jsfiddle.net/DTcHh/28480/

+0

Đối với tôi chỉ in những nhận phương thức cuối cùng. – Troyer

Trả lời

4

Đây là cách cũ bạn hoặc bạn có thể nói theo cách thông thường bạn đang thực hiện việc này. Nó vẫn có câu trả lời. chỉ cần liên kết ẩn và nhấp vào các sự kiện bên ngoài liên kết sự kiện hiển thị.

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

 
    var button = $(event.relatedTarget) // Button that triggered the modal 
 
    var recipient = button.data('whatever') // Extract info from data-* attributes 
 
    // If necessary, you could initiate an AJAX request here (and then do the updating in a callback). 
 
    // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead. 
 
    var modal = $(this) 
 
    modal.find('.modal-title').text('New message to ' + recipient) 
 
    modal.find('.modal-body input').val(recipient) 
 

 
    
 

 
}) 
 
    
 
$("#btnsend").on("click", function() { 
 
    console.log('Pinchado') 
 
    console.log(recipient) 
 
    }) 
 

 
    $("#btnclose").on("click", function() { 
 
    console.log('Cerrando...') 
 
    }) 
 

 
    $('#exampleModal').on('hidden.bs.modal', function(e) { 
 
    console.log('Cerrada'); 
 
    })
<!-- Latest compiled and minified CSS --> 
 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
 
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-dialog/1.34.7/css/bootstrap-dialog.min.css"> 
 

 
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"> 
 

 

 
<!-- jQuery library --> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 

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

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-dialog/1.34.7/js/bootstrap-dialog.min.js"></script> 
 

 

 

 

 
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo">Open modal for @mdo</button> 
 
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@fat">Open modal for @fat</button> 
 
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@getbootstrap">Open modal for @getbootstrap</button> 
 
...more buttons... 
 

 
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"> 
 
    <div class="modal-dialog" 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> 
 
     <h4 class="modal-title" id="exampleModalLabel">New message</h4> 
 
     </div> 
 
     <div class="modal-body"> 
 
     <form> 
 
      <div class="form-group"> 
 
      <label for="recipient-name" class="control-label">Recipient:</label> 
 
      <input type="text" class="form-control" id="recipient-name"> 
 
      </div> 
 
      <div class="form-group"> 
 
      <label for="message-text" class="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-default" id="btnclose" data-dismiss="modal">Close</button> 
 
     <button type="button" id="btnsend" class="btn btn-primary">Send message</button> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

Đưa ra dưới đây là cách hiện đại để làm việc đó. Bạn có thể tham khảo this link để biết thêm chi tiết về cách tạo động theo phương thức.

function open_modal(name) { 
 

 
    var message = $('#frm_1'); 
 
    BootstrapDialog.show({ 
 
    title: 'New message to ' + name, 
 
    message: $('#frm_1'), 
 
    onshown : function() { 
 
     $('#recipient-name').val(name); 
 
    }, 
 
    onhide : function(dialog) { 
 
     $('#hidden-div').append(message); 
 
    }, 
 
    buttons: [{ 
 
     label: 'Close', 
 
     action: function(dialog) { 
 
     dialog.close(); 
 
     } 
 
    }, { 
 
     label: 'Send message', 
 
     cssClass: 'btn btn-primary', 
 
     action: function(dialog) { 
 
     // Do whatever send message does, here 
 
     } 
 
    }] 
 
    }); 
 

 

 

 
}
<!-- Latest compiled and minified CSS --> 
 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
 
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-dialog/1.34.7/css/bootstrap-dialog.min.css"> 
 

 
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"> 
 

 

 
<!-- jQuery library --> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 

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

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap3-dialog/1.34.7/js/bootstrap-dialog.min.js"></script> 
 

 
<button type="button" class="btn btn-primary" onclick="open_modal('@mdo')">Open modal for @mdo</button> 
 
<button type="button" class="btn btn-primary" onclick="open_modal('@fat')">Open modal for @fat</button> 
 
<button type="button" class="btn btn-primary" onclick="open_modal('@getbootstrap')">Open modal for @getbootstrap</button> 
 

 

 

 
<div id="hidden-div" style="display : none"> 
 

 
    <form id="frm_1"> 
 
    <div class="form-group"> 
 
     <label for="recipient-name" class="control-label">Recipient:</label> 
 
     <input type="text" class="form-control" id="recipient-name"> 
 
    </div> 
 
    <div class="form-group"> 
 
     <label for="message-text" class="control-label">Message:</label> 
 
     <textarea class="form-control" id="message-text"></textarea> 
 
    </div> 
 
    </form> 
 

 

 
</div>

+0

câu trả lời tuyệt vời ... cảm ơn! –

0

Cảm ơn bạn rất nhiều vì câu trả lời của bạn. Làm việc ngay bây giờ. Trong ví dụ đầu tiên, có lỗi. Cần nó, xóa var để làm cho toàn cầu vars. Với hoạt động tốt.

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

      button = $(event.relatedTarget) // Button that triggered the modal 
      recipient = button.data('whatever') // Extract info from data-* attributes 
      // If necessary, you could initiate an AJAX request here (and then do the updating in a callback). 
      // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead. 
      var modal = $(this) 
      modal.find('.modal-title').text('New message to ' + recipient) 
      modal.find('.modal-body input').val(recipient) 
    }) 
1

Trong Bootstrap 3.3.7 tác phẩm này với tôi:

$('#myModal').trigger('click.dismiss.bs.modal')

Các vấn đề liên quan