我有一个名为“ saveForm()
”的Javascript函数,将从中将记录保存到数据库中。
我的表单有一个按钮,即“保存在草稿中”,可将记录保存为草稿模式。在此按钮上,有一个onclick
事件,它在javascript“ saveForm()
”函数上方调用。
现在,我具有一项自动保存记录的功能,该记录在表单字段的每个saveForm()
事件上都在“ onblur
”函数上方调用javascript。
现在,该场景是当我填写一个字段并直接单击“保存在草稿中”按钮时,它将记录多次保存为两次(onblur
和onclick
)事件,称为并行事件
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");
});
答案 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
}
});