2

重複の可能性:
attachEvent を使用して呼び出し元オブジェクト (「this」) を参照する方法

古いバージョンの 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();
}

デバッガーは「オブジェクトはこのプロパティまたはメソッドをサポートしていません」と表示するので、明らかに「これ」は私がすべきだと思うことをしていません。:-)

「これ」は<= IE8でまったく役に立ちますか? フォームを送信するにはどうすればよいですか?

4

2 に答える 2

-1

つまり、バージョンに依存しません

この方法で submit_valid() を呼び出すと、そのコンテキストは常にウィンドウ オブジェクトになります。次の 2 つの方法で関数のコンテキストを変更できます。

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 に答える