gpt4 book ai didi

javascript - 多个表单的多个 onsubmit 处理程序

转载 作者:行者123 更新时间:2023-12-02 20:29:13 25 4
gpt4 key购买 nike

我正在编写一段附加的 JavaScript,旨在在提交表单时捕获信息。我需要适应网页上可能有多个表单的情况,其中没有/部分/全部可能已经定义了 onsubmit 处理程序......并且我需要在调用 bolt 代码后触发原始处理程序。

我有一个包含 2 个表单的测试用例设置,第一个没有 onsubmit 处理程序,第二个是一个简单的警报框。

我尝试了下面的代码 - 但这似乎将预先存在的处理程序从 form2 复制到 form1:

window.onload=pageinit;

function pageinit()
{
for (var x=0; x < document.forms.length; x++) {
var origSubmit=document.forms[x].onsubmit;
if (typeof origSubmit != 'function') {
document.forms[x].onsubmit=dosubmit;
} else {
document.forms[x].onsubmit = function (event) {
dosubmit(event);
return origSubmit(event);
}
}
}
}

function dosubmit(ev)
{
alert('bolt-on invoked from ' + ev.target.name);
}

有什么想法吗?

TIA

最佳答案

我真的不明白你想要做什么,但你有典型的循环定义中的函数问题:

当调用任何 document.forms[x].onsubmit 函数时(显然是在循环完成之后),每个处理程序中的 origSubmit 将指向相同的函数(document.forms[document.forms.length - 1].onsubmit)。您必须“捕获”origSubmit 的值,因为 JavaScript 只有函数作用域,没有 block 作用域:

 for (var x=0; x < document.forms.length; x++) {
var origSubmit=document.forms[x].onsubmit;
if (typeof origSubmit != 'function') {
document.forms[x].onsubmit=dosubmit;
} else {
document.forms[x].onsubmit = (function(func) {
return function (event) {
dosubmit(event);
return func(event);
}
}(origSumbit));
}
}

另请参阅Closures for Dummies ,示例5

关于javascript - 多个表单的多个 onsubmit 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4429791/

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