Javascript onblur和onclick函数可多次保存记录

时间:2018-09-28 10:06:20

标签: javascript jquery html

我有一个名为“ saveForm()”的Javascript函数,将从中将记录保存到数据库中。

我的表单有一个按钮,即“保存在草稿中”,可将记录保存为草稿模式。在此按钮上,有一个onclick事件,它在javascript“ saveForm()”函数上方调用。

现在,我具有一项自动保存记录的功能,该记录在表单字段的每个saveForm()事件上都在“ onblur”函数上方调用javascript。

现在,该场景是当我填写一个字段并直接单击“保存在草稿中”按钮时,它将记录多次保存为两次(onbluronclick)事件,称为并行事件

Onclick:

<input type="button" class="btn" id="draftsave" value="Save in draft" onclick="javascript: saveForm(this.form.id, 'draft');" />

Onblur:

jQuery(document).delegate(":input[type!='button']", "blur", function() {            
    saveForm(this.form.id, "draft");
});

HTML Form

2 个答案:

答案 0 :(得分:0)

好吧,如果您想要此功能(但是您可以保持与onChange相关联的提交),只需在发生更改事件时发送布尔值即可,例如

<input type="text" onChange="someFunction(true);">

现在,您可以获取一个全局布尔变量,并使用onChange布尔参数的值更新其值。

boolean isOnChangeCalled=false;//global variable

function someFunction(isOnchange)
{
this.isOnChangeCalled=isOnchange
}

并且在onClick的情况下,只需检查此布尔值(即isOnChangeCalled)是否设置为true,然后执行onClick事件,否则提示用户该表单已保存

要在后端进行验证 如果已经提交了数据并且用户单击了提交按钮,则只需通过比较两个对象来检查数据是否已在数据库中更新,但这是额外的开销,如果数据已经存在则返回适当的响应

更新 您可以维护表单对象的克隆,并且在onClick事件之前可以比较两个对象,如果它们相同,则只需向用户提示相关消息

答案 1 :(得分:0)

您可以执行以下操作,也可以在插入数据库之前进行检查,但是在这种情况下,它将进行多个后端调用,最好在进行后端调用时将检查保持在前端,因此您可以尝试以下代码看看是否能解决您的问题:

var clicked;
$("#draftsave").click(function() {
  clicked = true;
});

jQuery(document).delegate(":input[type!='button']", "blur", function() {
  if (!clicked) {
    saveForm(this.form.id, "draft");
  } else {
    //do something
  }
});