【发布时间】:2011-11-23 15:19:39
【问题描述】:
我想为我网站上的每个表单附加一个事件侦听器,以便在提交表单时,会弹出一个确认框,询问用户是否确定要继续。如果用户不确定,我不想触发表单。
到目前为止,我有这个代码:
window.onload = function() {
for(var i=0; i<document.forms.length; i++){
document.forms[i].addEventListener("submit",formSubmit,false);
}
}
function formSubmit(e) {
if (confirm("Are you sure?")) {
return true;
}
return false;
}
注意事项:
- 我不能使用 jQuery
- 我不能使用 onDOMReady 类型的函数,因为 iframe 可能尚未加载 - 所以
window.onload是我唯一的选择(我认为?) - 此代码不起作用,因为当“您确定吗?”提交表单时弹出确认框,无论我点击哪个按钮,表单仍然提交。
- 此代码也不起作用,因为它不会在 iframe 中提取表单。我不仅需要捕获 iframe 中的表单,还需要捕获 iframe 中可能位于 iframe 中的表单...
我试过了:
var frame = document.getElementById("frameID").contentDocument;
for(var i=0; i<frame.forms.length; i++){
frame.forms[i].addEventListener("submit",formSubmit,false);
}
但它只适用于第一帧,如果我通过“返回”按钮进入页面,它似乎不起作用。这与wondow.onload 的工作方式有关吗?
提前感谢您的帮助!
更新
根据@Jan Pfeifer 给出的答案,我有以下代码可以解决即使您选择“取消”时表单仍然提交的问题,但它不会正确地将侦听器添加到每一帧中的每个表单。我为此开始赏金 - 任何人都可以让它适用于每个浏览器中的嵌套 iframe 吗?
function attach(wnd,handler){
for(var i=0; i<wnd.document.forms.length; i++){
var form = wnd.document.forms[i];
form.addEventListener('submit',handler,false);
}
for(var i=0; i<wnd.frames.length; i++){
var iwnd = wnd.frames[i];
attach(iwnd,handler);
}
}
function formSubmit(e){
if(!confirm('Are you sure?')) {
e.returnValue = false;
if(e.preventDefault) e.preventDefault();
return false;
}
return true;
}
window.addEventListener('load',function(){attach(window,formSubmit);},false);
【问题讨论】:
标签: javascript forms iframe event-listener