jQuery UI 대화 상자가 열려 있는지 감지


97

jQuery UI 대화 상자를 사용하고 있습니다. 열려 있으면 한 가지를하고 싶습니다. 닫혀 있으면 다른 작업을하고 싶습니다.

내 질문은 jQuery UI 대화 상자가 열려 있는지 여부를 어떻게 감지합니까?

답변:


173

문서 를 읽으면 .

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

이 메서드는 jQuery 객체가 아닌 부울 (true 또는 false)을 반환합니다.


1
도! 어떻게 간과했는지 모르겠습니다. 감사합니다.
user208662 2010-07-22

1
모든 대화에 대해이 테스트를 어떻게 수행 하시겠습니까? 별도의 초기화 및 옵션이있는 10 개의 서로 다른 대화 상자가 있고 특정 선택기가 아닌 열려 있는지 테스트하고 싶다고 가정 해 보겠습니다.
Kirk Ross

해당 대화 상자에 클래스를 추가 한 다음 isOpen 검사에서 선택기를 변경합니다.
Suipaste 2015-08-19

1
또한 : 10 개의 대화? 한두 개의 인스턴스를 재사용하여이를 줄이는 것도 고려해 볼 가치가 있습니다.
David

1
또한 대화가으로 초기화되었는지 확인하십시오 $("#mydialog").hasClass("ui-dialog-content"). stackoverflow.com/questions/29528706/…
Autumn Leonard

53

사실, 당신은 그것을 사실과 명시 적으로 비교해야합니다. 대화 상자가 아직 존재하지 않으면 예상대로 false를 반환하지 않고 DOM 개체를 반환합니다.

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

4
최신 JQuery에서 false를 반환합니다.
hoyhoy 2012

1
모든 대화에 대해이 테스트를 어떻게 수행 하시겠습니까? 별도의 초기화 및 옵션이있는 10 개의 서로 다른 대화 상자가 있고 특정 선택기가 아닌 열려 있는지 테스트하고 싶다고 가정 해 보겠습니다.
Kirk Ross

2
$ ( ". ui-dialog"). each (function (/ * check this dialog * /))와 같은 함수를 만들 수 있습니까?
marcovtwout 2014

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.