0

Ich teste unabhängige Teile eines größeren Stück Code für Funktionalität in MS CRM und ich möchte wissen, warum ich den obigen Fehler für erhalten Dieses kleine Stück Code:Ich bekomme immer 'Eigenschaft' Länge 'von undefined oder Nullreferenz nicht bekommen'

function testThis() 
{ 
    var optionset = document.getElementById("new_makeyear"); 
    console.log("this is supposed to be something " + optionset.Options.length); 
} 

"new_makeyear" ist eine Option festgelegt. Die Log-Anweisung war nur so, dass ich das Verhalten über die Konsole sehen kann. Was ist das Problem?

Dank

+1

verfügbar ' optionset' ist ein DOM-Element; bist du * sicher * hat es ein 'Options' Attribut? –

+2

Der Zugriff auf das DOM in Dynamics CRM-Webformularen wird nicht unterstützt. Wenn Sie auf ein bestimmtes Feld zugreifen müssen, sehen Sie sich die Funktionen 'Xrm.Page.getAttribute()' und 'Xrm.Page.getControl()' an. Die DOM-Elemente, die zu diesen Feldern gehören, haben Namen, denen ein Unterstrich + vorangestellt ist. –

+0

Gibt es einen besonderen Grund, warum Sie den DOM-Ansatz verwenden und nicht den Objektmodellansatz von Xrm verwenden? – Renjith

Antwort

2

Als Henk in seinem Kommentar erwähnt, sollten Sie das DOM nicht darauf zugreifen. Sie sollten die API verwenden, um die Optionen einer Optionsgruppe zu untersuchen, wie folgt aus:

function testThis() { 
    var makeYear = Xrm.Page.getAttribute("new_makeyear"); 
    if (!makeYear) { return; } 
    console.log(makeYear.getOptions().length + " options currently available"); 
} 
+0

Diese Lösung gab mir den folgenden Fehler: "Objekt unterstützt keine Eigenschaft oder Methode 'getOptions'" –

+0

@CarlosFarmer Whoops, Xrm.Page.getControl sollte Xrm.Page.getAttribute gewesen sein. Ich habe meine Antwort aktualisiert. – Polshgiant

0

Wenn Sie verwalten (via OnChange-Ereignis zum Beispiel) erzeugt DOM zugreifen, dann ist Option als if(this.options[this.selectedIndex].parentNode.tagName =='optgroup') var og = this.options[this.selectedIndex].parentNode.label;