Bạn không phải là người duy nhất thiếu tính năng đó. Tôi nghĩ rằng bootstrap đôi khi quá "tối giản", những người đứng đằng sau có ý tưởng rất nhiều nên được thực hiện trong "lớp thực hiện", nhưng nó là không sử dụng khi các plugin jQuery bootstrap tự làm cho nó không thể!
Bạn phải thực hiện các chức năng chính mình, như thế này:
trong bootstrap.js
v2.1.1 phương thức bắt đầu tại dòng 61.
trong Modal.prototype
, thêm hai chức năng, lock
và unlock
, vì vậy nó trông như thế này (tôi chỉ hiển thị ở đây là bắt đầu của modal.prototype
, bởi vì nó quá nhiều mã)
Modal.prototype = {
constructor: Modal
//add this function
, lock: function() {
this.options.locked = true
}
//add this function
, unlock: function() {
this.options.locked = false
}
, toggle: function() {
...
...
Sau đó, cũng trong Modal.prototype, tìm ra chức năng hide
, và thêm một dòng để nó trông như thế này (một lần nữa, chỉ có đầu ẩn được thể hiện)
, hide: function (e) {
e && e.preventDefault()
var that = this
//add this line
if (that.options.locked) return
e = $.Event('hide')
...
...
Và cuối cùng, thay đổi $.fn.modal.defaults
tới:
$.fn.modal.defaults = {
backdrop: true
, keyboard: true
, show: true
, locked: false //this line is added
}
Bây giờ bạn có chức năng khóa/mở khóa trực tiếp trong phương thức khởi động, ngăn người dùng đóng phương thức ở những thời điểm quan trọng.
Ví dụ:
Đây là một phiên bản sửa đổi của "Live Demo" từ http://twitter.github.com/bootstrap/javascript.html#modals
<!-- Button to trigger modal -->
<a href="#myModal" role="button" class="btn" data-toggle="modal">Launch demo modal</a>
<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Modal header</h3>
</div>
<div class="modal-body">
<p>One fine body…</p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<button class="btn btn-primary" onclick="$('#myModal').modal('lock');">lock</button>
<button class="btn btn-primary" onclick="$('#myModal').modal('unlock');">unLock</button>
</div>
</div>
<script type="text/javascript">
Tôi đã chèn hai nút "lock" và "unlock" - khi nhấn vào, họ đặt các phương thức trong chế độ khóa hoặc bình thường (các thiết lập nó được khởi tạo với)
Sửa, trong trường hợp của bạn, bạn chỉ cần gọi khóa/onlock khi làm ajax:
$("myModal").modal('lock');
$.ajax({
url: url,
...
...
, success(html) {
...
...
$("#myModal").modal('unlock');
}
});
sau khi tôi áp dụng phương pháp này, phông nền (nền màu xám) dường như biến mất. tôi cần phải tự $ ('# thisModal'). phương thức ({backdrop: true}); để dùng nó. đây có phải là một sai lầm hay đây là cách duy nhất để làm điều đó? –
@TianLoon. Đã cập nhật câu trả lời với thông báo về phiên bản bootstrap và [jsfiddle] (http://jsfiddle.net/Sz7ZS/) bằng cách sử dụng bootstrap 2.3.2 (phiên bản 2.x phổ biến nhất). Trong bối cảnh, phông nền xuất hiện - có thể bạn đã vô tình đặt nó thành mờ 0, màu trắng hay gì đó? – davidkonrad
THANK YOU SO MUCH CHO NÀY !!!!! –