2012-09-21 54 views
0

我之前曾问过这个问题,但经过一段时间后,我觉得在遇到的问题上我必须更加明确。2包含单独表单值的Fancybox不提交(测试页)

情景:

  • 1形式,即包含字段2个Fancyboxes。一个Fancybox包含“Field 1”和另一个“Field 2”。

FOR期望的结果:

  1. http://testing.myautoiq.com/fancybox
  2. 点击 “从主页提交”

正如你会注意到两个field_1值和field_2在返回_POST变量。

,产生错误1:

  1. 点击 “打开FB 1” 看到field_1
  2. 点击

“从FB 1提交” 正如你会注意到只有field_2是回。

,产生错误2:

  1. 点击 “打开FB 2”,你看field_2
  2. 点击

“从FB 2提交” 正如你会注意到只有field_1返回。

随意在源代码中挖掘,没有什么与众不同。这是FB的问题吗?如果是这样,它怎么能被纠正?我在这里试着疯了。

回答

0

首先,你必须了解的fancybox如何与inline内容:当您打开的fancybox,目标inline内容是“移动”从它的位置在DOM到的fancybox(占位符是左代替)

...在你的情况下,字段被“移出”form,所以当你从fancybox内提交时,字段field_1field_2不存在于form内部,因此它们不能返回任何值。

您需要重新编写代码的逻辑。我会做的是bind在报送form的fancybox内的事件封闭的fancybox(返回田里的地方form内)和提交form算账,而不是这些链接:

<a href="#" onClick="document.testform.submit();">Submit from FB 1</a> 

<a href="#" onClick="document.testform.submit();">Submit from FB 2</a> 

会做

<a class="submit" href="#nogo" >Submit from FB 1</a> 

<a class="submit" href="#nogo" >Submit from FB 2</a> 

通知我添加class="submit"处理来自这种选择该事件。

然后,在你的脚本的顶部创建一个标志(如下所述)

var subMitted = false; 

bind一个click事件选择.submit

$(".submit").bind("click", function(){ 
    subMitted = true; // set to true when we click on the selector .submit only 
    $.fancybox.close(); 
}); 

afterClose回调添加到您的fancybox自定义脚本

$(".fancybox").fancybox({ 
afterClose: function(){ 
    // will submit if we clicked the selector .submit 
    if(subMitted){ 
     subMitted = false; // re-initialize the flag 
     $("form[name='testform']").submit(); 
    } 
} 
}); 

如果subMittedtrue,我们点击.submit选择,所以我们将关闭的fancybox后提交form(我们不提交form IF的fancybox用的是close按钮关闭)

这样,你的表格将总是返回所有值,无论它是否从fancybox提交或不。