gpt4 book ai didi

javascript - onBeforeUnload 和多种形式

转载 作者:行者123 更新时间:2023-11-28 02:56:46 24 4
gpt4 key购买 nike

我希望有一个功能,可以在用户离开页面时在页面上提交多个表单。有一个“你想拯救吗?”问题和我到目前为止的代码是这样的:

function checkForChanges( ) {
if (window.formform1Changed == true) {
if (window.asked == false) {
window.asked=true;
doSave = confirm("Wanna save? Click OK")
}
if (window.doSaveForms || doSave) {
window.doSaveForms = true;
document.forms.form1.submit();
}
}
if (window.formform2Changed == true) {
if (window.asked == false) {
window.asked=true;
doSave = confirm("Wanna save? Click OK.")
}
if (window.doSaveForms || doSave) {
window.doSaveForms = true;
document.forms.form2.submit();
}
}
}

它可能看起来有点大材小用,但它是由我们的模板引擎自动生成的,并且可以扩展到更多形式。

正文标签:

<body
onLoad="init();
window.formform1Changed=false;
window.asked=false;
window.doSaveForms=false;
window.formform2Changed=false;"
onbeforeunload="checkForChanges();">

其中一种形式的有趣部分(另一种形式看起来相同:

<input value="xyz" id="la" onchange="window.formform1Changed=true;" />
<input name="save" onclick="window.formform2Changed=false; window.formform1Changed=false;" type="submit" value="save" />

现在解决问题:如果我更改两个表单中的值并离开页面,则会弹出第一个表单中的问题。我单击“确定”,表单已保存,但 form1.submit() 触发了一个新的 onBeforeUnload 事件,这破坏了我想法的整个逻辑。

现在的问题是,是否有一种方法可以在用户离开时仅询问一次即可提交页面上的所有表单?

非常感谢任何帮助!

谢谢。

最佳答案

表单提交需要回发,一旦您提交第一个表单,您的页面将重定向到该表单的“操作”,并且您将丢失其余表单中的信息。

在页面上拥有多个表单并不是最好的主意,但是,如果您绝对必须拥有它们,则保存所有表单的方法是将完整的回发替换为对 Web 服务的 AJAX 调用(或独立页面,接受查询字符串参数,尽管它不是那么安全或灵活的方式)。这样您就可以通过 AJAX 调用提交每个表单,而无需页面重定向。

关于javascript - onBeforeUnload 和多种形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2417430/

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