JavaScript IE8“这个”总是“对象窗口”

时间:2012-11-14 15:30:07

标签: javascript internet-explorer-8

  

可能重复:
  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中是否有用?我该怎么做才能提交表格?

2 个答案:

答案 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);