【问题标题】:Built in this->js->submit cakephp runs twice内置 this->js->submit cakephp 运行两次
【发布时间】:2012-11-02 16:11:48
【问题描述】:

各位程序员。

我只找到this reference 解决我的问题,但没有帮助。

我对 $this->Js->submit

中内置的蛋糕 phps 感到困惑

我想做的事:

我的逻辑开始的站点包含一个包含我的数据的表。在这个网站上,我还有几个包含表单并由模式窗口(jquery ui 对话框)打开的元素

  1. 将对象插入数据库。 (工作中)
  2. 我插入的表单位于模式对话窗口中。 (工作中)
  3. 提交按钮是一个图像。 (工作中)
  4. 在提交表单之前,会触发验证(工作中)
  5. 提交表单后,关闭模态框并将新对象放在表格的第一行(working)

那么我的问题是什么?

一切都会触发两次。

** 代码**

由于我的所有其他代码似乎都在工作,我将只粘贴代码的 $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. 在“成功”代码块的末尾添加 return false 行。
  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>

EDIT2 1. 尝试无效

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

所以这会阻塞整个 ajax 的事情(刷新页面后数据被追加到表中,仍然是两次)

【问题讨论】:

  • 添加输出到浏览器的实际 HTML 源代码可能很有用。

标签: jquery ajax cakephp-2.1 helpers


【解决方案1】:

我通过一个很好的解决方法解决了这个问题,所以如果有人提供信息为什么会这样,我会很高兴。

我的解决方案:

  • 添加了隐藏输入

    $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,我不允许创建对象。

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 2014-08-04
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 2013-09-07
    相关资源
    最近更新 更多