ตรวจสอบว่ากล่องโต้ตอบ jQuery UI เปิดอยู่หรือไม่


97

ฉันใช้กล่องโต้ตอบ jQuery UI ถ้าเปิดอยู่ฉันอยากทำอย่างหนึ่ง ถ้าปิดก็อยากทำอีก

คำถามของฉันคือฉันจะตรวจสอบได้อย่างไรว่ากล่องโต้ตอบ jQuery UI เปิดอยู่หรือไม่?

คำตอบ:


173

หากคุณอ่านเอกสาร

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

วิธีนี้ส่งคืนบูลีน (จริงหรือเท็จ) ไม่ใช่วัตถุ jQuery


1
ดู๊! ฉันไม่รู้ว่าฉันมองข้ามเรื่องนั้นไปได้อย่างไร ขอบคุณ.
user208662

1
คุณจะทำการทดสอบนี้อย่างไรสำหรับกล่องโต้ตอบใด ๆ และทั้งหมด? สมมติว่าคุณมีกล่องโต้ตอบที่แตกต่างกัน 10 รายการพร้อมช่องและตัวเลือกแยกกันและคุณต้องการทดสอบว่ารายการใดเปิดอยู่ไม่ใช่ตัวเลือกเฉพาะหรือไม่?
Kirk Ross

เพิ่มคลาสในกล่องโต้ตอบดังกล่าวจากนั้นเปลี่ยนตัวเลือกในการตรวจสอบ isOpen ของคุณ
Suipaste

1
บวกด้วย: สิบไดอะล็อก? บางทีการลดสิ่งนั้นด้วยการใช้อินสแตนซ์ซ้ำหรือสองครั้งก็เป็นความคิดที่ควรค่าแก่การพิจารณา
David

1
ตรวจสอบด้วยว่ามีการเริ่มต้นบทสนทนาด้วย$("#mydialog").hasClass("ui-dialog-content")หรือไม่ ดูstackoverflow.com/questions/29528706/…
Autumn Leonard

53

จริงๆแล้วคุณต้องเปรียบเทียบกับจริงอย่างชัดเจน หากยังไม่มีกล่องโต้ตอบจะไม่ส่งคืนเท็จ (ตามที่คุณคาดหวัง) จะส่งคืนวัตถุ DOM

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

4
ส่งคืนเท็จใน JQuery ล่าสุด
hoyhoy

1
คุณจะทำการทดสอบนี้อย่างไรสำหรับกล่องโต้ตอบใด ๆ และทั้งหมด? สมมติว่าคุณมีกล่องโต้ตอบที่แตกต่างกัน 10 รายการพร้อมช่องและตัวเลือกแยกกันและคุณต้องการทดสอบว่ารายการใดเปิดอยู่ไม่ใช่ตัวเลือกเฉพาะหรือไม่?
Kirk Ross

2
อาจจะสร้างฟังก์ชันเช่น $ (". ui-dialog") each (function (/ * check this dialog * /))?
marcovtwout

21

หากคุณต้องการตรวจสอบว่ากล่องโต้ตอบเปิดอยู่ในองค์ประกอบใดองค์ประกอบหนึ่งหรือไม่คุณสามารถทำได้:

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

หรือหากคุณเพียงต้องการตรวจสอบว่าองค์ประกอบนั้นมองเห็นได้หรือไม่คุณสามารถทำได้:

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

หรือ...

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

3
ฉันตรวจสอบ div ของฉันหากไม่ได้เริ่มต้นเช่นนั้น:$dialog.hasClass('ui-dialog-content')
Sergey

ขอบคุณฉันไม่สามารถรับคำตอบข้างต้นโดยใช้ "isOpen" เพื่อทำงานให้ฉันได้ แต่วิธีนี้ใช้ได้ผล
Kyle Challis


1

ความคิดเห็นของ Nick Craver เป็นวิธีที่ง่ายที่สุดในการหลีกเลี่ยงข้อผิดพลาดที่เกิดขึ้นหากยังไม่ได้กำหนดกล่องโต้ตอบ:

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

คุณควรตั้งค่าการเปิดเผยใน CSS ของคุณก่อนโดยใช้เพียง:

#elem { display: none; }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.