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