SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




getElementById() funktioniert nicht mit Variable

Unbeantwortet Dieser Beitrag hat 6 Antworten

Ohne Rang
4 Beiträge
StKg erstellt 28 Apr. 2014 13:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Community,

Trotz intensiver Internetrecherche finde ich für folgendes Problem keine Lösung.

Ich möchte auf einer Seite Fieldsets mit Hilfe von "getElementById().style.display = ..." sichtbar bzw. unsichtbar machen. Wenn ich die ID des Fieldsets direkt angebe (alert(getElementById("VariableWert").style.display)), bekomme ich den richtigen Display-Wert zurück. Wenn ich aber die ID als Variable angebe (alert(getElementById(VariablenNamen).style.display)), erhalte ich die Fehlermeldung "'Variable' ist undefiniert". Zur Fehlersuche habe ich die Schritte aufs Wesentliche reduziert und es mal so versucht:

variable = "Wert";

alert(variable); //Wert der Variablen wir richtig angezeigt. Die Variable sollte somit definiert sein.

alert(getElementById(variable).style.display; //Fehlermeldung "Variable" ist undefiniert.

Die Angabe der ID per Variable ist notwendig, da die Info welche Fieldsets sichtbar bzw. unsichtbar sein sollen, aus einer SharePoint-Liste abgefragt wird.

Hat jemand eine Idee, was ich falsch mache?

Für Eure Hilfe vielen Dank im Voraus

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 28 Apr. 2014 14:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die einzig mögliche Erklärung, die mir dazu einfällt, ist die, daß die "variable" out of scope ist. Das kann geschehen, wenn sie innerhalb einer anderen function definiert ist. Oder weil Dein Code aus einem anderen Kontext heraus aufgerufen wird. Oder weil die Variable durch eine näher liegende lokale Variable überschrieben wird, die aber noch keinen Wert hat.

Je nachdem, wo Du die Variable definiert hast, versuche sie mal voll qualifiziert zu verwenden, also z.B. window.variable oder myNamespace.variable

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
4 Beiträge
StKg Als Antwort am 28 Apr. 2014 14:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

Vielen Dank für deine schnelle Antwort.

Ich habe den Code direkt auf der Seite als Javascript eingefügt und, um Fehler auszuschließen, von der Listenabfrage entkoppelt und auf das Wesentliche reduziert. Definieren der Variable, nochmal anzeigen lassen und in der Abfrage verwenden. Alles direkt hintereinander.

Was meinst du mit "...,versuche sie mal voll qualifiziert zu verwenden,..."?

Viele Grüße

Stefan

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 28 Apr. 2014 15:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="StKg"]Was meinst du mit "...,versuche sie mal voll qualifiziert zu verwenden,..."?[/quote]

Was ich oben versucht habe zu beschreiben. Es hängt davon ab, wo die Variablen definiert sind und dann eben den gesamten Pfad zur variable mit angeben. Globale Variablen erreicht man, indem man window. davor schreibt. Wenn die Variable innerhalb eines Objekts oder einer Funktion definiert ist, dann z.B. mit window.myFunction.variable

[quote user="StKg"]Definieren der Variable, nochmal anzeigen lassen und in der Abfrage verwenden. Alles direkt hintereinander[/quote]

Hört sich komisch an. Kannst Du einen relevanten Codeausschnitt posten?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
4 Beiträge
StKg Als Antwort am 29 Apr. 2014 13:40
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

Ich habe deinen Vorschlag ausprobiert. Es hat aber leider nicht funktioniert. Ich habe darauf hin zum Spielen eine neue ShP-Seite mit einem Fieldset erstellt. Hier der Code:

 <script type="text/javascript">
 window.onerror = Fehlerbehandlung;
 
 function Fehlerbehandlung (Nachricht, Datei, Zeile) {
   Fehler = "Fehlermeldung:\n" + Nachricht + "\n" + Datei + "\n" + Zeile;
   zeigeFehler();
   return true;
 }
 
 function zeigeFehler () {
   alert(Fehler);
 }
 
 function zeigeEigenschaft(){
  var testGruppe = "TestFeld";
  alert(document.getElementById(testGruppe).style.display);
 }
 
 ExecuteOrDelayUntilScriptLoaded(zeigeEigenschaft, "sp.js");
 </script>

 <fieldset name="Group1" style="width: 200px; height: 200px; border: medium solid #FF0000; display: block;" id="TestFeld">
    <legend>Gruppenfeld</legend>
 </fieldset>

Funktioniert hat es erst, nachdem ich den Aufruf "zeigeEigenschaft();" in "ExecuteOrDelayUntilScriptLoaded(zeigeEigenschaft, "sp.js");" geändert habe. Bei meiner "Problem-Seite" hilft mir diese Erkenntnis aber nicht weiter, da ich die Funktion mit dem Problem bereits so aufrufe. Hier der nicht funktionierende Code:

    <script type="text/javascript">
    function AuswahlProdukt() {
        var clientContext = new SP.ClientContext('/support');
        var oList = clientContext.get_web().get_lists().getByTitle('Product State');
        var camlQuery = new SP.CamlQuery();
        camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name="Product_x0020_group")/>' +
              '<Value Type="Text">X-Ray</Value></Eg></Where></Query></View>');
        this.collListItem = oList.getItems(camlQuery);
        clientContext.load(collListItem);
        clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
    }
    
    function onQuerySucceeded(sender, args) {
        window.onerror = Fehlerbehandlung;
        var fieldSetID = '';
        var listItemInfo = '';
        var listItemEnumerator = collListItem.getEnumerator();
        while (listItemEnumerator.moveNext()) {
            var oListItem = listItemEnumerator.get_current();
            var oProductItem = String(oListItem.get_item('Product'));
            var oProduct = oProductItem.split("|");
            var oListProductState = oListItem.get_item('Product_x0020_state');
            fieldSetID = ("Fs_" + oProduct[0]).toUpperCase();
            //fieldSetID = "Fs_X-RAY 4000 850-013";
            alert(document.getElementById(fieldSetID).style.display);
           
            listItemInfo += '\nID: ' + oListItem.get_id() +
                '\nProduct: ' + oProduct[0] +
                '\nProduct state: ' + oListItem.get_item('Product_x0020_state');
        }
        alert(listItemInfo.toString());
    }
    
    function onQueryFailed(sender, args) {
        alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    }
    
    function Fehlerbehandlung(Nachricht, Datei, Zeile){
     Fehler = "Fehlermeldung:\n" + Nachricht + "\n" + Datei + "\n" + Zeile;
     zeigeFehler();
     return true;
    }
    
    function zeigeFehler(){
     alert(Fehler);
    }

   </script>

Das Problem scheint mir in den gelbmarkierten Zeilen zu liegen. Wenn ich, entgegen meiner früheren Aussage, die Variablenzuweisung "fieldSetID = ("Fs_" + oProduct[0]).toUpperCase();" gegen die auskommentierte Zeile "fieldSetID = "Fs_X-RAY 4000 850-013";" ersetze, bekomme ich die Eigenschaft des Fieldsets angezeigt. Ich bin mir sicher, dass ich das so schon früher ausprobiert hatte und es nicht funktioniert hat. Aber vielleicht hatte ich noch einen anderen Fehler drin, den ich unbemerkt beseitigt habe.

Bleibt die Variablenzuweisung mit Werten aus der ShP-Liste in der 1. gelben Zeile. Was könnte hier falsch sein?

Viele Grüße

Stefan

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 29 Apr. 2014 13:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das kann ich Dir auch nicht sagen, weil ich nicht weiß, was in Deinem Feld "Product" steht ;-) Das solltest Du Dir aml im Debugger selbst anscheuen.

Ich tippe auf ein Problem mit toUpperCase(). Du könntest folgendes versuchen:
fieldSetID = "FS_" + oProduct[0].toUpperCase();
fieldSetIT = "FS_" + (String(oProduct[0])).toUpperCase();

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
4 Beiträge
StKg Als Antwort am 29 Apr. 2014 15:25
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

Das war das Problem. Vielen Dank für deine Hilfe.

Viele Grüße

Stefan