Phát hiện xem hộp thoại jQuery UI có đang mở hay không


97

Tôi đang sử dụng hộp thoại giao diện người dùng jQuery. Nếu nó mở, tôi muốn làm một điều. Nếu nó đóng cửa, tôi muốn làm một cái khác.

Câu hỏi của tôi là, làm cách nào để phát hiện hộp thoại jQuery UI đang mở hay không?

Câu trả lời:


173

Nếu bạn đọc tài liệu.

$('#mydialog').dialog('isOpen')

Phương thức này trả về một Boolean (true hoặc false), không phải là một đối tượng jQuery.


1
Doh! Tôi không biết làm thế nào tôi bỏ qua điều đó. Cảm ơn bạn.
user208662

1
Bạn sẽ thực hiện bài kiểm tra này như thế nào cho bất kỳ và tất cả các hộp thoại? Giả sử bạn có mười hộp thoại khác nhau với các nút và tùy chọn riêng biệt và bạn muốn kiểm tra xem BẤT KỲ trong số đó có đang mở, không phải một bộ chọn cụ thể không?
Kirk Ross

Thêm một lớp vào các hộp thoại đã nói, sau đó thay đổi bộ chọn trên kiểm tra isOpen của bạn.
Suipaste

1
cộng thêm nữa: mười hộp thoại? có lẽ giảm rằng bằng cách tái sử dụng một ví dụ hoặc hai là một giá trị tư tưởng xem xét
David

1
Cũng kiểm tra xem đối thoại thậm chí đã được khởi tạo với $("#mydialog").hasClass("ui-dialog-content"). Xem stackoverflow.com/questions/29528706/…
Autumn Leonard

53

Trên thực tế, bạn phải rõ ràng so sánh nó với đúng. Nếu hộp thoại chưa tồn tại, nó sẽ không trả về false (như bạn mong đợi), nó sẽ trả về một đối tượng DOM.

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}

4
Trả về false trong JQuery mới nhất.
hoyhoy

1
Bạn sẽ thực hiện bài kiểm tra này như thế nào cho bất kỳ và tất cả các hộp thoại? Giả sử bạn có mười hộp thoại khác nhau với các nút và tùy chọn riêng biệt và bạn muốn kiểm tra xem BẤT KỲ trong số đó có đang mở, không phải một bộ chọn cụ thể không?
Kirk Ross

2
Có thể tạo một hàm như $ (". Ui-hộp thoại"). Each (function (/ * kiểm tra hộp thoại này * /))?
marcovtwout

21

Nếu bạn muốn kiểm tra xem hộp thoại có mở trên một phần tử cụ thể hay không, bạn có thể làm như sau:

if ($('#elem').closest('.ui-dialog').is(':visible')) { 
  // do something
}

Hoặc nếu bạn chỉ muốn kiểm tra xem bản thân phần tử có hiển thị hay không, bạn có thể làm:

if ($('#elem').is(':visible')) { 
  // do something
}

Hoặc là...

if ($('#elem:visible').length) { 
  // do something
}

3
Tôi kiểm tra div của mình nếu nó không được khởi tạo như vậy:$dialog.hasClass('ui-dialog-content')
Sergey

Cảm ơn, tôi không thể nhận được các câu trả lời ở trên bằng cách sử dụng "isOpen" để làm việc cho tôi, nhưng điều này đã hiệu quả.
Kyle Challis


1

Nhận xét của Nick Craver là đơn giản nhất để tránh lỗi xảy ra nếu hộp thoại chưa được xác định:

if ($('#elem').is(':visible')) { 
  // do something
}

Tuy nhiên, bạn nên đặt khả năng hiển thị trong CSS của mình trước tiên, chỉ cần sử dụng:

#elem { display: none; }
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.