gpt4 book ai didi

jquery - 内置this->js->提交cakephp运行两次

转载 作者:行者123 更新时间:2023-12-01 01:49:55 25 4
gpt4 key购买 nike

各位程序员。

我只找到this reference对于我的问题,这没有帮助。

我在 $this->Js->submit 中构建的蛋糕 php 遇到麻烦

我想做的事情:

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

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

那么我的问题是什么?

所有东西都会触发两次。

** 代码 **

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

编辑2 1.尝试不起作用

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

所以这会阻止整个ajax事情(刷新页面后数据会附加到表中,并且仍然两次)

最佳答案

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

我的解决方案:

  • 添加了隐藏输入

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

关于jquery - 内置this->js->提交cakephp运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com