После добавления формы закройте Colorbox iframe, а затем перенаправьте родительскую страницу - PullRequest
2 голосов
/ 12 марта 2012

Я пытался выяснить это уже пару недель, и результаты были весьма посредственными. Из-за недостатка знаний Jquery и минимальных знаний Javascript я собрал несколько кусков кода, найденных в сети, и я уверен, что все неправильно. Я использую Colorbox для отображения продукта с кнопкой «Добавить в корзину» в iframe (родительский и iframe - это страницы, поступающие с моего сервера). Мои желаемые результаты:

(отредактировано для ясности)

  1. чтобы кнопка добавления в корзину передавала данные формы родителю при отправке.
  2. закрыть фрейм Colorbox после прохождения формы.
  3. Родительский фрейм отправляет форму.

До сих пор я использовал следующий код для формы в моем iframe:

<form name="cart_quantity" action="index.php?action=add_product" method="post" 
enctype="multipart/form-data" onSubmit="parent.$.fn.colorbox.close();">
<input type="hidden" name="qty" value="1" /> 
<input type="hidden" name="id" value="7" /> 
<input type="hidden" name="attri" value="17" id="attri-17" />
<input class="cssButton button" type="submit" value="ADD TO CART"/> 
</form>

Мой скрипт, вызывающий colorbox на родительской странице:

<script>
function lightbox(){    
  $.fn.colorbox({ 
  iframe:true,
  onClosed:function(){ window.location = 'index.php?main_page=shopping_cart'; }, 
  href:"./index.php?main_page=product_info&id=7"});
}
</script>

Итак, проблемы до сих пор:

Когда форма отправлена, Colorbox закрывается, и форма отправляется только половину времени (частичный показатель успеха). Я пытался следить за опубликованными данными с помощью firebug, пытаясь узнать, публикуется ли он каждый раз, но, поскольку они поступают из iframe, мне кажется, что я ничего не вижу.

если кто-нибудь может помочь мне разобраться с правильным кодом, я был бы очень признателен!

1 Ответ

0 голосов
/ 25 ноября 2012

Вы можете попытаться добавить задержку:

onSubmit="window.setTimeout(function(){parent.$.fn.colorbox.close();}, 150);"

Измените значение 150 на любое необходимое значение, чтобы убедиться, что запрос отправлен.

Подробнее о setTimeout здесь.

...