3

次のようにして、特定のイベントの JavaScript 関数を登録するのが一般的です。

myBtn.Attributes.Add("onClick", "Validate(getElementById('"+txtFirstName.ClientID + "'));");

私は常にgetElementByIdそれ自体を使用してきました。つまり、前にドキュメントを追加していません。getElementByIdしかし、最近、の代わりに使用しようとすると、ページが壊れてしまいますdocument.getElementById。どうしてこれなの?奇妙なことに、あるページでは だけを使用できる Web サイトがありますgetElementByIdが、別のページでは だけを使用すると要素が見つからず、 を使用したgetElementById場合にのみ機能するため、JavaScript エラーがスローされますdocument.getElementById

これがなぜなのか知っている人はいますか?document.getElementByIdドキュメントプレフィックスなしで機能するかどうかに関係なく、どこでも使用する必要がありますか?

編集: 1 つのページが AJAX を使用しており、もう 1 つのページは使用していないという事実と何か関係があるのでしょうか?

4

6 に答える 6

7

使用getElementById()して機能する場合、それが呼び出された関数がドキュメントのコンテキストで実行されていることを意味します。それは this == ドキュメントです。

document.getElementByIdそのため、この種のエラーを回避するために常に使用する必要があります。

とにかく、私は getElementById の使用を完全にやめて、JQueryの使用を開始します。後悔することはないと確信しています。

JQuery を使用した場合、コードは次のようになります。

$("#myBtnID").click(function () { Validate($("#myTextboxID"))});
于 2009-05-12T18:54:28.900 に答える
3

所有オブジェクトなしでアクセスする関数または変数 (例: document.getElementById) は、ウィンドウからプロパティにアクセスします。

したがって、getElementById は実際には window.getElementById であり、ネイティブに定義されていません (以前に定義していない限り (例: getElementById = document.getElementById))。

于 2009-05-12T18:54:30.257 に答える
1

フルを使用する必要がありますdocument.getElementById()。冗長すぎる場合は、jQuery を使用できます。

$('#' + id)

または、スクリプトの先頭にエイリアスを作成できます。

var byID = document.getElementById;
于 2009-05-12T18:54:00.367 に答える
1

document.getElementByIdのみを使用する必要があります(プロトタイプや jquery などのライブラリを使用して $ 記号を使用できるようにすることをお勧めします)。

getElementById を単独で使用できる場合は、使用しているブラウザが機能させるために何らかのトリックを行っているためですが、正しい方法は document 変数を使用することです。

于 2009-05-12T18:52:06.953 に答える
0

説明する方法がよくわかりませんが、getElementById() がページの html 構造で要素を見つけるためです。一部のブラウザーは、デフォルトでドキュメントを検索する必要があることを認識していますが、他のブラウザーはドキュメントのために追加のガイダンスを必要とします。

于 2009-05-12T18:52:30.617 に答える
0

確かに正しい方法はdocument.getElementById()です。

単独で動作する可能性がある理由 (推測) は、使用する場所によっては、現在のコンテキストが実際にはドキュメント オブジェクトである可能性があるため、非明示的に document.getElementById() が発生する可能性があるためです。

于 2009-05-12T18:54:41.770 に答える