2009-05-12 8 views
3

Es ist für mich JavaScript-Funktionen für bestimmte Ereignisse zu registrieren, indem Sie wie etwas zu tun:document.getElementById() VS. getElementById()

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

ich immer getElementById von selbst, oder mit anderen Worten verwendet habe, sans Dokument, das gerade ihn vorangestellt. Aber ich habe in letzter Zeit Seiten, wenn ich versuche, getElementById anstelle von document.getElementById zu verwenden. Warum ist das? Seltsamerweise habe ich eine Website, wo eine Seite mir erlaubt, nur getElementById zu verwenden, aber eine andere Seite wirft einen Javascript-Fehler, weil es das Element nicht finden kann, wenn ich nur getElementById mache, und es funktioniert nur, wenn ich document.getElementById mache.

Wer weiß, warum das ist? Sollte ich überall document.getElementById verwenden, egal ob es ohne das Dokumentenpräfix funktioniert?

EDIT: Könnte es etwas mit der Tatsache zu tun haben, dass eine Seite AJAX verwendet und die andere nicht?

+0

Hey, könntest du die aktuelle Antwort nicht akzeptieren? Es ist falsch, und es könnte Leute in die Irre führen, die auf diese Frage stoßen. – Ryan

Antwort

1

Sie sollten nur document.getElementById verwenden (auch wenn ich Bibliotheken wie prototype oder jquery empfehlen würde, um das $ -Zeichen verwenden zu können).

Wenn Sie in der Lage sind, getElementById allein zu verwenden, geschieht dies nur, weil der von Ihnen verwendete Browser eine Art Trick ausführt, um es zum Laufen zu bringen. Die korrekte Methode besteht jedoch darin, die Dokumentvariable zu verwenden.

0

Ich weiß nicht wirklich, wie man es erklärt, aber es ist, weil die getElementById() ein Element in der HTML-Struktur einer Seite findet. Einige Browser wissen, dass Sie standardmäßig das Dokument durchsuchen möchten, aber andere Browser benötigen dieses zusätzliche Dokument.

1

Sie sollten die volle document.getElementById() verwenden. Wenn Sie, dass zu ausführlich finden, könnten Sie jQuery verwenden:

$('#' + id) 

oder Sie können einen Aliasnamen am Anfang des Skripts erstellen:

var byID = document.getElementById; 
+1

Ihr Alias ​​funktioniert möglicherweise nicht, weil 'this' nicht an' document' gebunden wird; Damit es funktioniert, müssten Sie 'var byID = function (id) verwenden {return document.getElementById (id); }; ' – Christoph

+1

Ich verachte Aliasing zu keinem Ende, aber ich werde JQuery sicher betrachten. Danke für die Eingabe! – Jagd

7

Wenn Sie getElementById() verwenden und es funktioniert bedeutet, dass die Funktion, wo es aufgerufen wird, läuft auf den Kontext des Dokuments, das ist das == Dokument.

Also sollten Sie IMMER document.getElementById verwenden, um diese Art von Fehlern zu vermeiden.

Wie auch immer, ich würde sogar aufhören, GetElementById insgesamt und starten Sie mit JQuery, ich bin sicher, dass Sie es nie bereuen werden.

Ihr Code würde wie folgt aussehen, wenn Sie JQuery verwendet:

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

+1, ernsthaft, es gibt eine Menge von Nutzen in der Verwendung einer hochwertigen JS-Bibliothek – cgp

+1

Awesome. Ich werde auf jeden Fall einen Blick auf JQuery werfen. – Jagd

+8

Sorry, aber Ihre Beschreibung ist falsch: Die aktuelle lexikalische Umgebung (der 'Kontext') unterscheidet sich von dem Objekt, auf das 'this' verweist; Wenn eine einfache 'getElementById()' funktioniert, bedeutet das nicht, dass 'this == document', sondern eine Variable mit einem solchen Namen in einer einschließenden Funktion oder dem globalen Objekt (alias 'window') definiert ist. – Christoph

3

Jede Funktion oder Variable, die Sie ohne besitzendes Objekt zugreifen (zB: document.getElementById) wird die Eigenschaft von Fenstern öffnen.

So getElementById ist eigentlich window.getElementById, die nicht nativ definiert ist (es sei denn Sie es vor (ex definiert: getElementById = document.getElementById)

+0

Einige ältere Versionen von FF und IE hatten dieses Dilemma: es war window.getElementById in einem und document.getElementById in dem anderen. – staticsan

0

Der richtige Weg ist in der Tat document.getElementById()..

Der Grund (Spekulation) es könnte allein funktionieren, je nachdem, wo Sie es verwenden, kann der aktuelle Kontext in der Tat das Dokument-Objekt sein, so unrealistischen Ergebnis in document.getElementById().