可能重复:
How to reference the caller object (“this”) using attachEvent
我对旧版IE中“this”的行为感到困惑。
警报(本);总是返回[对象窗口]。我意识到答案是“使用JQuery”,但遗憾的是我不允许这样做。
我在页面上有多个表单,这些表单由cgi脚本生成。
当我尝试将侦听器放在输入按钮上时,会出现问题。监听器将进行一些边界检查,然后提交表单。
if (inputs[b].name === "Submit") {
form = document.forms[f];
form.attachEvent("onclick", function () {
submit_valid();
});
}
我希望能够从“submit_valid”提交表单。
function submit_valid (form) {
alert(this);
this.submit();
}
调试器显示“对象不支持此属性或方法”,所以显然“this”没有做我认为应该做的事情。 : - )
“这”在< = IE8中是否有用?我该怎么做才能提交表格?
答案 0 :(得分:-1)
它与版本无关
当你以这种方式调用submit_valid()时,它的上下文将永远是window对象 你可以用两种方式改变函数上下文:
form.attachEvent("onclick", function () { submit_valid.apply(this); });
或
form.attachEvent("onclick", function () { submit_valid.call(this); });
这样,函数的上下文就是表单本身,你点击它 如果你想更深入地理解它,我会推荐这篇文章来阅读http://odetocode.com/blogs/scott/archive/2007/07/05/function-apply-and-function-call-in-javascript.aspx
答案 1 :(得分:-1)
在submit_valid函数中,您调用的是未定义的this.submit。你需要做的是调用form.submit();
function submit_valid (form) {
form.submit();
}
并在事件处理程序创建中附加submit_valid作为处理程序。
form.attachEvent("onclick", submit_valid);