2009-05-12 7 views
3

私のような何かをすることによって、特定のイベントのためのJavaScript関数を登録することが一般的です:私は常に自分自身でgetElementByIdを使用しましたdocument.getElementById()VS. getElementByIdを()は

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

、または他の言葉で、SANはそれの前に付加されているドキュメント。しかし、私は最近、の代わりにgetElementByIdを使用しようとすると、ページが壊れてしまいます。どうしてこれなの?奇妙なことに、1つのページでただgetElementByIdを使用できるウェブサイトがありますが、getElementByIdとすれば要素を見つけることができず、document.getElementByIdの場合にのみ機能します。

誰でもこの理由を知っていますか?ドキュメントの接頭辞なしで動作するかどうかにかかわらず、どこでもdocument.getElementByIdを使用する必要がありますか?

編集: これは、1ページがAJAXを使用していて、もう1つがそうでないという事実とは関係がありますか?

+0

あなたは現在の回答を受け入れることができますか?それは間違っており、この質問に遭遇する人々を誤解させる可能性があります。 – Ryan

答えて

1

document.getElementById($記号を使用するには、プロトタイプやjqueryのようなライブラリを使用することをお勧めします)でも使用してください。

getElementByIdを単独で使用できるのは、使用しているブラウザが動作するために何らかのトリックを行っているからですが、正しい方法はドキュメント変数を使用することです。

0

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

1

フルdocument.getElementById()を使用してください。

$('#' + id) 

か、あなたのスクリプトの先頭にエイリアスを作成できます:あなたはあまりにも冗長なことが判明した場合、あなたはjQueryのを使用することができ、あなたがgetElementById()を使用し、それが動作するとき

var byID = document.getElementById; 
+1

エイリアスは 'this'を' document'にバインドしないので動作しません。それを動作させるには、 'var byID = function(id){return document.getElementById(id);}を使う必要があります。 }; ' – Christoph

+1

私は終わりまでエイリアシングを軽視しませんが、私はJQueryを確かめます。入力いただきありがとうございます! – Jagd

7

ことがあることを意味します関数が呼び出された場所は、ドキュメントのコンテキスト上で実行されています。これはthis ==ドキュメントです。

このようなエラーを避けるには、常にdocument.getElementByIdを使用する必要があります。

とにかく、私はgetElementByIdの使用をやめて、JQueryを使用し始めます。後悔しないと確信しています。あなたはjQueryのを使用した場合

あなたのコードは次のようになります:

$("#myBtnID").click(function() { Validate($("#myTextboxID"))}); 
+1

+1、真剣に、高品質のJSライブラリ – cgp

+1

素晴らしいを使用して多くのユーティリティがあります。私はJQueryを見ていきます。 – Jagd

+8

申し訳ありませんが、あなたの説明は間違っています:現在のレキシカル環境( 'context')は 'this'によって参照されるオブジェクトと異なります。普通の 'getElementById()'が動作する場合、それは 'this == document'を意味するのではなく、そのような名前を持つ変数が囲み関数またはグローバルオブジェクト(別名' window')で定義されています – Christoph

3

あなたが所有しているオブジェクト(例:のdocument.getElementById)せずにアクセスし、任意の関数や変数は、ウィンドウからプロパティにアクセスします。

だから、getElementByIdを、実際にあなたが(例:前にそれを定義しない限り、ネイティブ(定義されていないwindow.getElementById、次のとおりです。getElementByIdを=のdocument.getElementById)

+0

FFとIEの古いバージョンには、このジレンマがありました。これは、window.getElementByIdが1つで、document.getElementByIdがもう1つでした。 – staticsan

0

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

それは単独で機能するかもしれない理由は、現在のコンテキストが実際にはドキュメントオブジェクトであるかもしれないので、明示的にdocument.getElementById()という結果になるということです。