2009-11-23 1 views
0

Ceci est un désagrément que j'ai toléré depuis trop longtemps, et j'ai finalement décidé de poursuivre une réponse. Je montre une boîte de dialogue jQuery modale dans mon application Web, mais l'animation pour l'afficher ne se produit pas dans le bon ordre. Je mets un événement click (en utilisant jQuery) à un lien sur une page, et quand l'utilisateur clique dessus, il crée un nouveau dialogue, avec autoOpen défini sur true. Annuler de la boîte de dialogue le détruit afin que l'utilisateur puisse l'ouvrir à nouveau au prochain clic.jQuery Show Dialog L'animation modale se produit pendant la durée de l'arrière-plan

Quelle que soit l'animation que j'utilise (actuellement en aveugle), il semble que toute la page s'assombrit d'abord, puis ouvre la boîte de dialogue (toujours grisée) et la désactive une fois ouverte. Juste ne pas se produire dans le bon ordre. Quelqu'un d'autre a-t-il vu cela ou sait-il pourquoi cela pourrait se produire? Code que j'utilise pour créer le dialogue est ci-dessous:

function setDialogWindows($dialogDiv, $leftList, $rightList, leftArray, rightArray, $htmlItemList) { 

    $dialogDiv.dialog({ 
     autoOpen: true, 
     modal: true, 
     show: 'blind', 
     hide: 'blind', 
     width: 600, 
     resizable: false, 
     buttons: { 
      Cancel: function() { 
       resetDialog($leftList, $rightList); 
       $(this).dialog('destroy'); 
      }, 
      'Save': function() { 

       if (saveDialog($leftList, $rightList, leftArray, rightArray, $htmlItemList)) { 
        showHideItemList("show"); 
       } 
       else 
        showHideItemList("hide"); 

       $(this).dialog('destroy'); 
      } 
     } 
    }); 
} 

Toute aide serait appréciée. Merci.

+0

Je ne suis pas sûr de la commande que vous recherchez. Vous souhaitez que l'arrière-plan reste grisé jusqu'à ce que l'utilisateur clique sur Enregistrer ou Annuler dans la boîte de dialogue?!? – Brad8118

+0

@Brad, vient de voir ce commentaire. Non, je décrivais simplement comment ça se joue actuellement. Actuellement, l'arrière-plan s'assombrit d'abord, puis la boîte de dialogue apparaît via l'animation, mais est également grisée tout le temps (difficile à voir, mais elle "aveugle" dans le fond grisé), et seulement une fois que l'animation est complète. la boîte de dialogue s'allume pendant que le reste de l'arrière-plan s'assombrit. Évidemment, j'aimerais que l'arrière-plan soit sombre et que la boîte de dialogue reste aveugle. Je ne suis pas sûr pourquoi il doit compléter l'animation avant qu'elle ne s'allume. –

Répondre

1

J'ai réussi à afficher correctement ceci dans IE et FireFox où la page était grisée et l'animation de la boîte de dialogue terminée correctement (non grisée). Avez-vous un autre script jQuery qui agit sur cette balise <div>?

EDIT: J'ai juste pu recréer ce problème. Il semblerait que ce soit un problème avec l'affichage initial de la boîte de dialogue combinée avec une animation. Dans votre cas, parce que votre création/destruction constante du dialogue apparaît à chaque fois. Voici quelque chose que vous pourriez vouloir essayer:

function setupDialog($dialogDiv) { 
    // set autoOpen: false 
    // within Cancel and Save use .dialog('close') 
} 

// Define the dialog boxes: 
setupDialog($('#dialog1')); 
setupDialog($('#dialog2')); 
setupDialog($('#dialog3')); 

// Show the dialog on button clicks: 
$('#button1').click(function() { 
    $('#dialog1').dialog('open'); 
}); 
$('#button2').click(function() { 
    $('#dialog2').dialog('open'); 
}); 
$('#button3').click(function() { 
    $('#dialog3').dialog('open'); 
}); 
+0

@ CAbbott, je ne fais rien de spécifique avec cette div nulle part ailleurs dans mon code. Cependant, j'utilise une fonction générique appelée setDialog que j'utilise pour construire trois boîtes de dialogue séparées (très similaires), et passer dans la div que je veux utiliser pour construire. Le div que je passe est basé sur des événements de clic attachés à différents liens sur la page. Cela pourrait-il avoir quelque chose à voir avec ça? –

+0

@Matt - Peut-être :). 2 choses à garder à l'esprit: 1) les animations comme 'blind' sont asynch donc si vous faites quelque chose d'autre avec cette balise div cela peut gâcher l'affichage. 2) toutes les choses précédentes que vous avez définies sur cette balise div sont toujours en vigueur (comme une bascule). Est-ce seulement des effets qui le font agir comme ça? Est-ce que enlever 'hide:' et 'show:' fait fonctionner correctement? – CAbbott

+0

@ CAbbott, Eh bien, tout se passe si vite, mais je suis à peu près sûr que lorsque j'ai supprimé les effets hide/show, tout se passe en même temps. C'est à dire. l'arrière-plan s'assombrit et la boîte de dialogue apparaît au même moment. C'est mieux que ce que j'avais, mais je préférerais certainement (du point de vue de l'expérience utilisateur) une animation. Si je devais le laisser sans une animation d'entrée ou de sortie, je préférerais au moins que l'arrière-plan soit sombre avant l'apparition de la boîte de dialogue, mais maintenant je suis juste gourmand :). Aperçu intéressant dans votre édition précédente. –

Questions connexes