Cách kiểm tra xem phương thức bootstrap có đang mở hay không, vì vậy tôi có thể sử dụng jquery validate


111

tôi chỉ cần thực hiện xác thực nếu một phương thức đang mở, bởi vì nếu tôi mở nó, rồi tôi đóng nó, và tôi nhấn nút để mở phương thức đó thì nó không hoạt động vì nó đang thực hiện xác thực jquery, nhưng không hiển thị vì phương thức đã bị loại bỏ.

Vì vậy, tôi muốn quảng cáo một jquery nếu phương thức đang mở để tôi xác thực, điều này có khả thi không?

<script>
$(document).ready(function(){

var validator =$('#form1').validate(
 {
  ignore: "",
  rules: {

usu_login: {
  required: true
},
usu_password: {
  required: true
},
usu_email: {
  required: true
},
usu_nombre1: {
  required: true
},
usu_apellido1: {
  required: true
},
usu_fecha_nac: {
  required: true
},
usu_cedula: {
  required: true
},
usu_telefono1: {
  required: true
},
rol_id: {
  required: true
},
dependencia_id: {
  required: true
},
  },

  highlight: function(element) {
$(element).closest('.grupo').addClass('has-error');
        if($(".tab-content").find("div.tab-pane.active:has(div.has-error)").length == 0)
        {
            $(".tab-content").find("div.tab-pane:hidden:has(div.has-error)").each(function(index, tab)
            {
                var id = $(tab).attr("id");

                $('a[href="#' + id + '"]').tab('show');
            });
        }
  },
  unhighlight: function(element) {
$(element).closest('.grupo').removeClass('has-error');
  }
 });

}); // end document.ready

</script>

Câu trả lời:


183

Để tránh tình trạng chủng tộc mà @GregPettit đề cập, người ta có thể sử dụng:

($("element").data('bs.modal') || {})._isShown    // Bootstrap 4
($("element").data('bs.modal') || {}).isShown     // Bootstrap <= 3

như đã thảo luận trong Twitter Bootstrap Modal - IsShown .

Khi phương thức chưa được mở, .data('bs.modal')sẽ trả về undefined, do đó dấu || {}- sẽ tạo ra isShowngiá trị (falsy) undefined. Nếu bạn thích nghiêm khắc, người ta có thể làm($("element").data('bs.modal') || {isShown: false}).isShown


2
Có một vấn đề với điều này, nếu phương thức không được mở, bạn sẽ nhận được 'không xác định' từ $ ("phần tử"). Data ('bs.modal')
Flezcano

._isShown làm việc cho tôi, tôi đang sử dụng bootstrap 4 alpha
Iftikar Urrhman Khan

8
Trong Bootstrap 4 _isShown, không phải vậy isShown.
elquimista

Tôi chỉ đang kiểm tra xem modal có lớp 'hiển thị' không (bootstrap 4) - hoạt động như tôi cần. Kiểm tra _isShown có tốt hơn theo một cách nào đó không?
trainoasis

Bạn có thể vui lòng chia sẻ giải pháp trong bản đánh máy?
Surajit Biswas

80

Bạn có thể dùng

$('#myModal').hasClass('in');

Bootstrap thêm inlớp khi phương thức mở và loại bỏ nó khi đóng


4
Điều này hóa ra hơi mong manh với tùy chọn mờ dần và nhấp chuột nhanh hoặc kích hoạt một phương thức thông qua lệnh gọi Ajax. Sự chậm trễ về thời gian trên màn phai có thể tạo ra các điều kiện về cuộc đua. Tuy nhiên, một cách hữu ích để kết nối nó khi nội dung tĩnh và mô hình chỉ bật lên trong quá trình tương tác của người dùng!
Greg Pettit

Cách an toàn nhất, chắc chắn nhất để tránh tình trạng chạy đua trên phương thức Bootstrap là đăng ký shown.bs.modalhoặc hidden.bs.modalcác sự kiện của nó . Bằng cách đó, khi mã sự kiện của bạn được kiểm soát, bạn chắc chắn rằng hộp thoại không ở trạng thái cảm ứng.
Eric Lloyd

Nó có hợp lệ trong phiên bản Bootstrap 4 không?
Mahdi Alkhatib

1
@MahdiAlkhatib Không, điều này không hoạt động trong Bootstrap 4. Bạn có thể thay thế 'in'bằng 'show'Bootstrap 4.
Philip Stratford

61

Bạn cũng có thể trực tiếp sử dụng jQuery.

$('#myModal').is(':visible');

1
Giống như khi câu trả lời là đơn giản. Nếu sử dụng ajax, tôi sử dụng điều này trong onbefore và kiểm tra và trả về false, bằng cách đó, điều này cũng ngăn chặn nhiều cuộc gọi đến máy chủ. Cảm ơn!
Eaglei22

Câu trả lời được chấp nhận trả về không xác định hoặc null. Điều này hoạt động hoàn hảo. Cảm ơn!
Alex

8

Kiểm tra xem một phương thức có đang mở không

$('.modal:visible').length && $('body').hasClass('modal-open')

Để đính kèm một trình nghe sự kiện

$(document).on('show.bs.modal', '.modal', function () {
    // run your validation... ( or shown.bs.modal )
});

6

Bootstrap 2, 3 Kiểm tra xem có bất kỳ phương thức nào đang mở trong trang không:

if($('.modal.in').length)

phiên bản tương thích Bootstrap 2, 3, 4+

if($('.modal.in, .modal.show').length)

Chỉ Bootstrap 4+

if($('.modal.show').length)

3
Tôi đang sử dụng Bootstrap 4.1.3và nó thêm showlớp thay vì in.
Arif Hussain

4
$("element").data('bs.modal').isShown

sẽ không hoạt động nếu phương thức chưa được hiển thị trước đó. Bạn sẽ cần thêm một điều kiện bổ sung:

$("element").data('bs.modal')

vì vậy câu trả lời có tính đến lần xuất hiện đầu tiên:

if ($("element").data('bs.modal') && $("element").data('bs.modal').isShown){
... 
}



0

Tại sao phải phức tạp hóa mọi thứ khi nó có thể được thực hiện với jQuery đơn giản như sau.

$('#myModal').on('shown.bs.modal', function (e) {
    console.log('myModal is shown');
    // Your actual function here
})
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.