2

可能重复:
如何使用 attachEvent 引用调用者对象(“t​​his”)

我对旧版本 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 中是否有用?我应该怎么做才能提交表格?

4

2 回答 2

-1

它与版本无关

当您以这种方式调用 submit_valid() 时,它的上下文将始终是窗口对象,您可以通过两种方式更改函数上下文:

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

于 2012-11-14T15:36:30.457 回答
-1

在 submit_valid 函数中,您调用的是未定义的 this.submit。你需要做的是调用 form.submit();

function submit_valid (form) {

    form.submit();
}

并在事件处理程序创建中附加 submit_valid 作为处理程序。

form.attachEvent("onclick", submit_valid);
于 2012-11-14T15:36:37.460 回答