0

フォームがあります

<div id='formdiv'>
<form action='purchase.php' method="POST" id="purchaseform"> 
......

<input type="submit" value="Add Purchase" />
</form></div>

ユーザーがフォームを送信した後、最初に入力者を確認します。

$('#purchaseform').submit(function(){
    $('#formdiv').hide();
    $('#confirmdiv').show();

return false;   
});

ここで、confirmdivは次のとおりです。

<div id='confirmdiv'>
data to be confirmed....
<input type="button" value="Confirm" id = "confirmform"/> 
<input type="button" value="Cancel" id = "cancelform"/>


</div>

ユーザーが確認ボタンをクリックしたら、フォームを送信しようとしています

$('#confirmform').click(function(){
        $('#purchaseform').submit();
        $('#formdiv').show();
        $('#confirmdiv').hide();
    });  

しかし、フォームは送信されていません...誰かが私がここで間違っていることを知っていますか?

4

5 に答える 5

1

提出しないのはかなり論理的です。結局のところ、送信しようとすると、代わりに送信イベントハンドラーに移動し、常にfalseを返します。送信がフォームのボタンからではなくスクリプトからのものである場合は、それが送信されることを確認する必要があります。これを行う1つの方法は、次のようなものです。

var confirmed = false;
$('#purchaseform').submit(function(){
    if (!confirmed)
    {
        $('#formdiv').hide();
        $('#confirmdiv').show();

        return false;
    }
    else
    {
        confirmed = false;
        return true;
    }
});

$('#confirmform').click(function(){
    confirmed = true;
    $('#purchaseform').submit();
    $('#formdiv').show();
    $('#confirmdiv').hide();
});

これは、ニーズに合わせて簡単に編集できます。これを行う別の方法は、実際の送信イベントではなく、元のイベントを送信ボタンにバインドすることですが、これを行うと、フォームにテキストフィールドがあり、ユーザーがを押すと、後で問題が発生する可能性があります。選択した状態で入力してください。これにより、確認なしで直接送信されますが、上記のソリューションでは、確認が適切に要求されます。

于 2012-11-08T12:20:41.577 に答える
1

それを呼び出すと、$('#purchaseform').submit();最初のステートメントが再び読み取られるためです。

$('#purchaseform').submit(function(){
    $('#formdiv').hide();
    $('#confirmdiv').show();
    return false;   
});

非表示の入力を使用して、データが確認されているかどうかを示してみてください。フォームに非表示のテキストフィールドを配置します

<div id='formdiv'>
<form action='purchase.php' method="POST" id="purchaseform">   

<input type="submit" value="Add Purchase" />
<input type="hidden" name="isconfirm" id="isconfirm" value="0" />
</form></div>

次に、他のステートメントreturn falseで、他の関数を呼び出す前に条件を設定します

$('#purchaseform').submit(function(){
  var confirm = $("#isconfirm").val();
  if(confirm == 0) { 
      $('#formdiv').hide();
      $('#confirmdiv').show();

     return false; }   

});

次にこれも変更します

$('#confirmform').click(function(){
    $("#isconfirm").val(1); //change the value to 1
    $('#purchaseform').submit();
    $('#formdiv').show();
    $('#confirmdiv').hide();

});  
于 2012-11-08T12:23:31.863 に答える
1

確認ダイアログが必要な場合は、まず、jqueryuiダイアログプラグインhttp://jqueryui.com/dialog/#modal-confirmationを使用する方がよいと思います。

使用するコードは次のとおりです。

1-確認ダイアログに「display:none」を追加します

    <div id='confirmdiv' style="display:none">
     data to be confirmed....
    </div>
  • 確認イベントを削除する

    $('#confirmform').click ....
    

2-ダイアログを初期化します

    $( "#confirmdiv" ).dialog({
        resizable: false,
        height:140,
        modal: true,
        buttons: {
            "Confirm": function() {
               $('#purchaseform').submit();
            },
            "Cancel": function() {
                $( this ).dialog( "close" );
            }
        }
    });

3-コードをテストします

4-それはすべての人々です

于 2012-11-08T12:31:05.557 に答える
0

フォームが送信されたときに何が起こるかを上書きしています

$('#purchaseform').submit(function(){
    $('#formdiv').hide();
    $('#confirmdiv').show();

    return false;   
});

代わりに、あなたはどうですか

$('#purchaseform').find(":submit").click(function(e){
    $('#formdiv').hide();
    $('#confirmdiv').show();

    return false;
}

または、もちろん、送信ボタンにIDを設定して使用することもできます。

于 2012-11-08T12:21:04.350 に答える
0

これは、$('#confirmform')。submit()関数が最初の送信関数を再度呼び出すためです。

于 2012-11-08T12:21:39.993 に答える