まず、fancyboxがコンテンツとどのように連携するかを理解する必要がありますinline
。fancyboxを開くと、ターゲットinline
コンテンツはDOM内の位置からfancyboxに「移動」されます(代わりにプレースホルダーが残されます)
...あなたの場合、フィールドは「移動」されているform
ため、fancybox内から送信すると、フィールド内に存在しないか、フィールド内に存在しないfield_1
ため、値を返すことができません。field_2
form
コードのロジックを書き直す必要があります。私がすることは、 fancybox内をfancyboxを閉じるイベントに送信し(フィールドを内部の元の場所に戻す)、後で送信bind
するリンクへのリンクです。したがって、これらの代わりに:form
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();
}
}
});
の場合、セレクターをクリックして、ファンシーボックスを閉じた後に送信します(ボタンを使用してファンシーボックスを閉じた場合はsubMitted
送信しません)true
.submit
form
form
close
このように、フォームは、fancybox内から送信されたかどうかに関係なく、常にすべての値を返します。