2010-01-05 4 views
17

Я использую jQuery ColorBox, чтобы отобразить элемент корзины покупок. Когда пользователь вводит количество в iFrame (открывается с помощью colorbox) и нажимает кнопку отправки, я хочу, чтобы iFrame был закрыт, а главное окно (родительский) обновлялось автоматически.Закрыть ColorBox iFrame после отправки

Я имею в виду, я хочу две вещи, после представления данных о плавающем фрейме:

  1. плавающего фрейма автоматически закрывается.
  2. Родительское окно автоматически обновляется.

Пожалуйста, помогите мне.

ответ

35

использовать это на родительском окне при открытии IFrame:

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

и это, чтобы закрыть IFRAME внутри IFrame страницы:

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

Блестящее спасибо! – Amien

+1

@nik есть в любом случае передать параметр методу onClosed? – Anthony

+0

Извините @ Энтони за поздний ответ, подойдя сюда в sc после долгого времени. вы всегда можете вызвать функцию в родительском окне из вашего iframe, например: window.parent.functionInParent ('myData'); перед родителем. $. Fn.colorbox.close(); – nik

3

После отправки формы в кадре 1, вы можете использовать следующий JavaScript, чтобы перезагрузить родительский фрейм:

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

, где я должен написать это? N, что i frame или на родительском html? и я думаю, что это не работает в jQuery colorbox – diEcho

+0

Я использовал это на кнопке close в colorbox, и он отлично работал: закрыл iframe и перезагрузил родительскую страницу. –

1

Подари тэг формы, как это:

<form target="_top"> 

затем после представить:

response.redirect("your form") 
2

открытый JQuery .colorbox.js найти эти две части s кода:

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


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

заменить их - обратите внимание на добавление "window.location.reload();"

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


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

Изменение исходного источника звучит как плохая идея –

0

Если вы используете Drupal 7, вам, возможно, придется использовать следующую альтернативу:

parent.jQuery.colorbox.close(); 

В D7, то $ .fn, кажется, заменить объект JQuery.

Я просто настроить меню обратного вызова, который просто возвращенное это:

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

вроде нормально работает для меня :)

+0

Почему это проголосовало ?! – Nick

1

Просто имитировать щелчок на кнопке закрытия, как это:

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

это единственное, что работает для меня. очень умно. другие решения, по-видимому, недействительны, потому что вы можете закрыть только цветную панель с тем же Javascript, который ее открыл. – Mauro

0

Если вы хотите, чтобы остаться на текущей странице:

  1. напишите следующий код на родительской странице, где применяется colorbox.

    $(document).ready(function(){ 
    
    $(".tu_iframe_800x600").colorbox({width:"80%", height:"100%", iframe:false 
    
        }); 
    }); 
    
  2. и следующий код на текущей странице, где вы хотите, чтобы закрыть Colorbox parent.$.fn.colorbox.close();

Примечание: Пожалуйста, замените .tu_iframe_800x600 с вашим HTML класса, на который называется Colorbox ...

+0

отредактируйте свой пост и отформатируйте код, чтобы сделать его доступным для чтения – kleopatra

Смежные вопросы