3

仲間のプログラマー。

私は自分の問題へのこの言及を見つけただけで、それは役に立ちませんでした。

$ this->Js->submitに組み込まれたケーキphpで問題が発生しています

私がやりたいこと:

ロジックが開始するサイトには、データを含むテーブルが含まれています。このサイトには、フォームを含み、モーダルウィンドウ(jquery uiダイアログ)によって開かれるいくつかの要素もあります

  1. データベースにオブジェクトを挿入します。(働く)
  2. 挿入するフォームは、モーダルダイアログウィンドウにあります。(働く)
  3. 送信ボタンは画像です。(働く)
  4. フォームが送信される前に、検証が実行されます(動作中)
  5. フォームが送信されたら、モーダルを閉じて、テーブルの最初の行に新しいオブジェクトを配置します(作業中)

それで私の問題は何ですか?

すべてが2回発火します。

**コード**

他のすべてのコードは機能しているように見えるので、コードの$ this-> Js-> submit部分のみを貼り付けるので、問題のように見えることに集中できます。

他のコードが必要な場合は、私に書いてください。編集セクションにもう少し貼り付けさせていただきます。

echo $this->Js->submit(' ', array (
        'label' => 'Send',
        'onsubmit'=>"event.returnValue = false; return false;",
        'div'   => array('class' => 'send_button'), //style submit to be an image
        'url'   => array('controller' => 'records', 'action' => 'append_new_record'),
        'type' => 'json',
        'success' => '
            if (data.success == true) {
                $("#element_add").dialog("close");
                var newLine = data.recordLine;
                $("#content").find("table tbody").find("tr:first").before(newLine);
            }
            else { 
                $("#element_add").html(data.form);
            }
            ',
        'buffer' => false, //true did not help (refreshes the whole web site)
        'before' => '
            if (!checkAdd()) { //validation (custom js function)
                return false;
            }
        '
    ));

私が試したこと

  1. コードの「success」ブロックの最後にreturnfalse行を追加します。
  2. コードの「前」ブロックの先頭にevent.preventDefault()を追加します。

EDIT1ここに生成されたHTMLコードがあります

    </script><div class="send_button"><input  id="submit-1182269389" type="submit" value=" "/></div><script type="text/javascript">

$("#submit-1182269389").bind("click", function (event) {$.ajax({beforeSend:function (XMLHttpRequest) {
                if (!checkAdd()) {
                    return false;
                }
            }, data:$("#submit-1182269389").closest("form").serialize(), dataType:"json", label:"Send", onsubmit:"event.returnValue = false; return false;", success:function (data, textStatus) {
                if (data.success == true) {
                    $("#element_add").dialog("close");
                    var newLine = data.recordLine;
                    $("#okno").find("table tbody").find("tr:first").before(newLine);
                }
                else {
                    $("#element_add").html(data.form);
                }
                }, type:"post", url:"\/my_app\/records\/append_new_record"});
return false;});

</script></form>

EDIT21.動作しなかったことを試してください

<script type="text/javascript">
    $('#addForm').submit(function(event) {
        event.preventDefault();
    });
</script>

したがって、これはajax全体をブロックします(データはページを更新した後、さらに2回テーブルに追加されます)

4

1 に答える 1

0

私はこれを素晴らしい回避策で解決したので、誰かがなぜこれがこのように動作しているのかについての情報を提供してくれれば嬉しいです。

私の解決策:

  • 非表示の入力を追加しました

    $this->Form->input('submit_type', array('id'=>'add_submit_type', 'type'=>'hidden', 'value'=>0));
    
  • このコードブロックを追加する前に

    var value = $("#add_submit_type").val();
    if (value == 1) {
        $("#add_submit_type").val("0");
    } else {
        $("#add_submit_type").val("1");
    }
    
  • 私のPHPでは、$ this->request->dataのsubmit_type==0の場合、オブジェクトの作成を許可しません。

于 2012-11-07T09:51:03.543 に答える