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?
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:
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.
$("#mydialog").hasClass("ui-dialog-content")
. Xem stackoverflow.com/questions/29528706/…
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
}
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
}
$dialog.hasClass('ui-dialog-content')
Hộp thoại jQuery có một thuộc isOpen
tính có thể được sử dụng để kiểm tra xem hộp thoại jQuery có đang mở hay không.
Bạn có thể xem ví dụ tại liên kết này: http://www.codegateway.com/2012/02/detect-if-jquery-dialog-box-is-open.html
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; }