2

動作していない次のコードがあります。私はあなたがこれで私を助けることができることを願っています。

基本的に、送信する前にまずjQueryDialogを使用して確認したいフォームがあります。したがって、[送信]をクリックするとダイアログが表示されますが、[はい]を押して何も起こらないことを確認します。

    $(function() {

        $('#massform').submit(function(e){
           e.preventDefault();
           $('#dialog-mass-confirm').dialog('open');
        });


        $( "#dialog-mass-confirm" ).dialog({
            autoOpen: false,
            resizable: false,
            draggable: false,
            height:180,
            modal: true,
            buttons: {
                "No": function() {
                    $( this ).dialog( "close" );
                },
                "Yes": function() {
                    $("#massform").submit();
                }
            }
        });
    });

<form id="massform" method="post" action="new.php">
    <input type="text" name="email" size="41">
    <input type="submit" value="Submit">
</form>
4

2 に答える 2

0

フォームの送信関数を再バインドし、モーダルから送信を呼び出すと、最初にモーダルを開いたのと同じイベントが発生するため、循環参照があるようです。この問題を回避するために、次のことをお勧めします。

$(function() {

    $('#submitButton').click(function(e){
       e.preventDefault();
       $('#dialog-mass-confirm').dialog('open');
    });


    $( "#dialog-mass-confirm").dialog({
        autoOpen: false,
        resizable: false,
        draggable: false,
        height:180,
        modal: true,
        buttons: {
            "No": function() {
                $( this ).dialog( "close" );
            },
            "Yes": function() {
                $("#massform").submit();
            }
        }
    });
});

<form id="massform" method="post" action="new.php">
    <input type="text" name="email" size="41">
    <input ID="submitButton" type="button" value="Submit">
</form>
于 2012-10-22T22:18:04.793 に答える
0

ルックアップスコープとイベントトリガーをより詳細に確認して、直面している問題を理解します。1.フォーム送信イベントにバインドされるjqery関数を作成しました。

   $('#massform').submit(function(e){
           e.preventDefault();
           $('#dialog-mass-confirm').dialog('open');
        });

送信ボタンを使用すると、イベントが発生し、ダイアログが開きます。ただし、フォームを送信する場合

            "Yes": function() {
            $("#massform").submit();

先に指摘したバインドされた関数を起動します...これにより、フォーム自体が送信されなくなります。正確には、ダイアログを再度開くだけです。しかし、それはあなたがそれに気付かないほど速く起こります。

互換性の理由で送信アクションを使用せざるを得ない場合...loc変数を使用してダーティジョブを実行できます...

$('#massform').submit(function(e, lock){
   if(lock)
   e.preventDefault();
   $('#dialog-mass-confirm').dialog('open');
});

送信でロックを設定できます。この方法で試したことはありませんが、機能するはずです。私は通常、ドキュメントレディスコープの変数を使用することになります。

フォームを変更できない場合、これは汚い解決策です。醜いですが、動作します。

于 2012-10-22T22:39:33.940 に答える