2010-07-10 4 views
3

Je souhaite afficher une boîte contextuelle de confirmation simple si un utilisateur essaie de fermer la boîte de couleur. J'ai essayé ce code:Confirmer la fermeture Colorbox

onCleanup:function(){ confirm('Are you sure'); } 

Il affiche la boîte de confirmation mais la boîte de couleur est fermée même si je clique sur "Annuler"!

Quelqu'un peut-il aider s'il vous plaît?

Répondre

0

Je ne sais pas si colorbox permet d'annuler la fermeture une fois que vous avez commencé ..

Si elle l'a fait, cependant, vous devrez changer votre code pour

onCleanup:function(){ return confirm('Are you sure'); } 
+0

ne fonctionne pas :( –

+1

peut toujours modifier ColorBox pour ajouter un rappel onBeforeClose qui prend en compte les valeurs de retour des callbacks/callbacks –

+0

@Jonathan, en effet.Et d'un coup d'oeil à la source, il est assez simple comment le faire .. –

5

J'ai fait quelque chose de similaire avec FancyBox. Je pense que votre meilleur pari est de lier un gestionnaire d'événements au bouton de fermeture lorsque le ColorBox est affiché:

onComplete:function(){ 
    $("#cboxClose").click(function(e) { 
    // stop any other script from firing 
    e.stopPropagation(); 
    if (confirm('Are you sure')) { 
     $.colorbox.close(); 
     // ensure that the binding is removed when closed 
     $("#cboxClose").unbind(); 
    } 
    }); 
} 
5

@Ken, votre exemple a parfaitement fonctionné pour moi ... presque. La seule modification que j'ai dû faire était de déconnecter avant de définir la fonction de clic car pour une raison quelconque, elle ignorerait mon instruction if et se fermerait toujours au premier chargement. Voici ce que j'ai mis en service pour une confirmation lors de la fermeture d'un colorbox

$(".Add").colorbox({ 
    onComplete:function(e){ 
     $("#modalForm").ajaxForm(modalOptions); 
     $("#cboxClose").unbind(); 
     $("#cboxClose").click(function(e){ 
      e.stopPropagation(); 
      if(confirm('Are you sure you want to cancel your changes?')){ 
      $.colorbox.close(); 
      $("#cboxClose").unbind();        
      }       
     }); 
    } 
    }); 
+0

Cela fonctionne très bien !!! Merci – user1531437

+0

Cela fonctionne très bien! Existe-t-il un moyen de montrer seulement le message SI quelque chose a été changé sur la page ouverte dans colorbox? – Dennis

+0

@Dennis, je voudrais attacher un gestionnaire onChange sur toutes les entrées pour ce formulaire en utilisant jQuery. Si cette fonction est appelée, définissez une variable (par exemple 'var hasChanged = false; // pour init value') par défaut -' $ ("# colorboxFormId: input"). On ("changez", function() {hasChanged = true;}) '. Ensuite, votre 'if (confirm ...)' deviendrait 'if (hasChanged && confirm (....)'. Excusez-moi pour les fautes de frappe dans ce code - c'est le haut de ma tête comme la méthode que je voudrais poursuivre – Tommy

8

Il existe déjà un nice example in the FAQ of colorbox

Vous devez redéfinir colorbox » méthode proche:

var originalClose = $.colorbox.close; 
$.colorbox.close = function(){ 
    if (confirm('Do you want to close this window?')) { 
    originalClose(); 
    } 
};