getElementById in separate js-Datei nicht finden ASP.net Kontrolle
Wenn ich dieses in die markup der Seite funktioniert es einwandfrei:
<script type="text/javascript">
function bought1()
{
var s = '<%= Button2.ClientID %>';
var v = document.getElementById(s);
v.click();
}
</script>
Aber wenn ich die gleiche Sache in einer separaten Datei, auch wenn die Funktion ist ausgeführt - den Wert der v
bleibt null
.
Habe ich versucht mit einem einfachen div
und es hat finden Sie die div
.
Warum nicht finden ASP.net Button?
BEARBEITEN
Ich auch noch ClientIDMode="Static"
auf die Schaltfläche. Keine änderung.
- Sie überprüft die tatsächliche gerenderten html auf beiden Seiten?
- Ich habe mit IE und FF js-Debugger - Sie geben beide eine
null
fürv
. - Einen sofortigen "fix" wäre, um ihm eine Klasse und target-Klasse. Wenn in einer separaten JS-Datei, die
<%= Button2.ClientID %>
hat nicht Holen Sie ausgewertet, da JavaScript-Dateien werden nicht ausgewertet, indem die ASP.NET server - Sie serviert wird, statisch. - ich meine, die Ansicht der eigentlichen Quelle. Sehen, was gerendert wird für
var s = '<%= Button2.ClientID %>';
etc... - auch, wie @ian sagt - die server-tags
<% %>
funktioniert nicht in einem separaten .js-Datei. - Es zeigt nur
<script type='text/javascript' src='JScript1.js'></script>
. - Wenn Sie
ClientIDMode="Static"
, dann ändern Sie Ihren code ein:var s = 'Button2';
(und stellen Sie sicher, dass Sie den cache Ihres Browsers leeren und die Seite neu laden) - Ich habe es
'<%= Button2 %>'
. Aber von Gewinnen Antwort, vorausgesetzt, es ist richtig, sehe ich, dass das nicht helfen wird. (Button2
natürlich.) Danke. - er meinte es ändern zu
var s = 'Button2';
und nichtvar s = '<%= Button2 %>';
tun Sie dies, nachdem SieClientIDMode="Static"
auf Ihre Schaltfläche
Du musst angemeldet sein, um einen Kommentar abzugeben.
<%= Button2.ClientID %>
ist eine server-code. Sie können nicht ausgeführt, server-code in eine separate javascript-Datei.Wenn Sie Zugriff auf Server-ID von separaten javascript, die Sie brauchen, um die
ClientIDMode
entweder preditable oder statisch.Hier ist ein Beispiel.
Folgenden ist ein code. Es ist kein gutes Beispiel, aber ich hoffe, Sie bekommen die Idee.
Hinweis: Stellen Sie sicher, Sie haben nicht die gleichen Ids verwenden wenn Sie
ClientIDMode="Static"
. Ansonsten-Ids kollidieren. Zum Beispiel, eine in der master-Seite und das in einer content-Seite.ASPX
Javascript-Datei
Gewinnen, ist richtig, Ihre separaten JS-Datei wird nicht wiedergegeben ASP.net.
Jedoch, wenn Sie einfach
oben, wo Sie laden Ihre externen Datei, die Sie laden Sie den Wert in einen global auf der Seite, dass der Zugriff auf alle Skripte geladen, nachdem es. So stellen Sie sicher, geben ihm einen Namen, der nicht kollidieren mit jedem Bibliotheken, die Sie geladen haben.
ClientID
ist (siehe hier.) Und außerdem - es nicht im ersten Fall.s
in der externen Datei? Das sieht wie eine gute Lösung. Danke.Sollten Sie Ändern Sie die Funktion wie folgt:
und nennen es in Ihrem markup der Seite:
Alternativ, wenn Sie möchten, um zu vermeiden, die Unordnung der JS globals und dumping asp.net Variablen insgesamt, nur wickeln Sie Ihre Schaltfläche, und verwenden Sie eine queryselector (oder jquery, etc), um es zu packen:
asp.net:
JS:
document.getElementById("button-container").children[0]
. Gute Idee, obwohl 🙂