2010-01-05 4 views
17

J'utilise jQuery ColorBox pour afficher un article de panier. Lorsqu'un utilisateur saisit la quantité dans l'iFrame (ouvert avec la palette de couleurs) et clique sur le bouton d'envoi, je souhaite que l'iFrame soit fermé et que la fenêtre principale (parent) soit automatiquement actualisée.Fermer ColorBox iFrame après soumettre

Je veux dire que je veux deux choses après la présentation des données sur iFrame:

  1. iFrame se ferme automatiquement.
  2. La fenêtre parent est actualisée automatiquement.

S'il vous plaît aidez-moi.

Répondre

35

utiliser sur la fenêtre parent lors de l'ouverture iframe:

$(document).ready(function(){ 
    $(".chpic").colorbox({width:"80%", height:"80%", iframe:true, 
     onClosed:function(){ location.reload(true); } }); 
}); 

et ce pour fermer la iframe dans la page iframe:

parent.$.fn.colorbox.close(); 
+1

Merci génial! – Amien

+1

@nik est-il de toute façon passer un paramètre à la méthode onClosed? – Anthony

+0

Désolé @Anthony pour la réponse tardive, venir ici en SC après longtemps. vous pouvez toujours appeler une fonction sur la fenêtre parent à partir de votre iframe comme: window.parent.functionInParent ('myData'); juste avant le parent. $. Fn.colorbox.close(); – nik

3

Une fois le formulaire soumis à l'image 1, vous pouvez utiliser le code JavaScript suivant pour recharger le cadre parent:

window.parent.location.reload(true); 
+0

où je dois écrire ceci? N que je cadre ou sur parent html? et je pense que cela ne fonctionne pas dans jquery colorbox – diEcho

+0

Je l'ai utilisé sur un bouton de fermeture dans une boîte de couleur et cela a bien fonctionné: fermé l'iframe et rechargé la page parente. –

1
<form target="_top"> 
1

Donner balise form comme ceci:

<form target="_top"> 

puis après soumettre:

response.redirect("your form") 
2

jquery ouvert .colorbox.js trouver ces deux pièces s de code:

$close.click(function() { 
    publicMethod.close(); 
}); 


$overlay.click(function() { 
    if (settings.overlayClose) { 
    publicMethod.close(); 
    } 
}); 

remplacer par ceux-ci - noter l'ajout de "window.location.reload();"

$close.click(function() { 
    publicMethod.close(); 
    window.location.reload();   
}); 


$overlay.click(function() { 
    if (settings.overlayClose) { 
    publicMethod.close(); 
    window.location.reload(); 
    } 
}); 
+2

Modifier la source brute sonne comme une mauvaise idée –

0

Si vous utilisez Drupal 7, vous devrez peut-être utiliser l'alternative suivante:

parent.jQuery.colorbox.close(); 

En D7, le .fn de $ semble être remplacé par l'objet jQuery.

je simplement configurer un rappel de menu qui simplement retourné ceci:

return <<<EOF 
<script type="text/javascript"> 
    <!--//--><![CDATA[//><!-- 
    parent.jQuery.colorbox.close(); 
    //--><!]]> 
</script> 
EOF; 

Semblait fonctionne très bien pour moi :)

+0

Pourquoi cette décision a-t-elle été rejetée?! – Nick

1

Tout simplement simuler un clic sur le bouton de fermeture, comme ceci:

$("#cboxClose").click(); 
+0

c'est le seul qui travaille pour moi. très intelligent. les autres solutions ne sont apparemment pas valides car vous ne pouvez fermer qu'une boîte de couleur avec le même Javascript qui l'a ouvert. – Mauro

0

Si vous voulez rester à la page en cours:

  1. écrivez le code suivant sur la page parent où colorbox est appliqué.

    $(document).ready(function(){ 
    
    $(".tu_iframe_800x600").colorbox({width:"80%", height:"100%", iframe:false 
    
        }); 
    }); 
    
  2. et le code suivant sur votre page en cours où vous voulez fermer colorbox parent.$.fn.colorbox.close();

Note: s'il vous plaît remplacer .tu_iframe_800x600 avec votre classe html sur lequel le colorbox est appelé ...

+0

s'il vous plaît modifier votre poste et le format du code pour le rendre lisible – kleopatra