100 votes

Détecter si une boîte de dialogue jQuery UI est ouverte

J'utilise une boîte de dialogue jQuery UI. Si elle est ouverte, je veux faire une chose. S'il est fermé, je veux en faire une autre.

Ma question est la suivante : comment puis-je détecter si une boîte de dialogue jQuery UI est ouverte ou non ?

181voto

Byron Whitlock Points 29863

Si vous lisez le docs.

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

Cette méthode renvoie un booléen (vrai ou faux), et non un objet jQuery.

1 votes

Doh ! Je ne sais pas comment j'ai pu oublier ça. Merci.

1 votes

Comment faire ce test pour toutes les boîtes de dialogue ? Disons que vous avez dix boîtes de dialogue différentes avec des entrées et des options distinctes et que vous voulez tester si TOUTES les boîtes sont ouvertes, et non un sélecteur spécifique ?

0 votes

Ajoutez une classe auxdites boîtes de dialogue, puis modifiez le sélecteur de votre contrôle isOpen.

56voto

marcovtwout Points 1473

En fait, vous devez explicitement le comparer à true. Si le dialogue n'existe pas encore, il ne retournera pas false (comme vous vous y attendez), il retournera un objet DOM.

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

4 votes

Renvoie false dans la dernière version de JQuery.

1 votes

Comment faire ce test pour toutes les boîtes de dialogue ? Disons que vous avez dix boîtes de dialogue différentes avec des entrées et des options distinctes et que vous voulez tester si TOUTES les boîtes sont ouvertes, et non un sélecteur spécifique ?

2 votes

Peut-être créer une fonction comme $(".ui-dialog").each(function(/*check this dialog*/)) ?

22voto

Nick Craver Points 313913

Si vous voulez vérifier si la boîte de dialogue est ouverte sur un élément particulier, vous pouvez le faire :

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

Ou si vous voulez simplement vérifier si l'élément lui-même est visible, vous pouvez le faire :

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

Ou...

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

3 votes

Je vérifie mon div s'il n'est pas initialisé comme ça : $dialog.hasClass('ui-dialog-content')

0 votes

Merci, je n'ai pas pu obtenir les réponses ci-dessus en utilisant "isOpen" pour moi, mais ceci a fonctionné.

2voto

Avinash Points 21

La boîte de dialogue jQuery possède un isOpen qui peut être utilisée pour vérifier si une boîte de dialogue jQuery est ouverte ou non.

Vous pouvez voir un exemple à ce lien : http://www.codegateway.com/2012/02/detect-if-jquery-dialog-box-is-open.html

-5voto

Amit Points 1
$('#mydialog').dialog({
  open: function() {
    //do something
  },
  close: function() {
    //do something
  }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X