2016-05-11 9 views
-4

Ich stehe fest, versucht, den ausgewählten Wert von einem Element 'Select' über Javascript abzurufen. Ich kann das Element aus dem DOM nicht einmal mit jQuery oder document.getElementById() abrufen. Hier ist mein Code:HTML-Element kann nicht nach ID abgerufen werden

console.log(e) -> 'null' 
console.log(e2) -> <Got the element> 
console.log(e3) -> 'undefined' 
console.log(e4) -> <Nothing, just a blank> 

Alle Iden auf, was dieses Problem verursachen könnte:

function getDropdown(headerText, options, id) { 
     var container = document.createElement('div'); 
     container.setAttribute('class', 'nfvo-drop-down-container'); 

     var dd = document.createElement('select'); 
     $(dd).attr('id', id); 
     for(var val in options) { 
      $('<option />', {value: val, text: options[val]}).appendTo(dd); 
     } 

     if(headerText) { 
      var span = document.createElement('span'); 
      span.setAttribute('class', 'panel-header'); 
      span.appendChild(document.createTextNode(headerText)); 
      container.appendChild(span); 
     } 

     container.appendChild(dd); 
     return container; 
    } 
    var dd = getDropDown('My dropdown', [1,2,3,4], 'ddID); 
    var e = document.getElementById('ddID'); 
    var e2 = $('#ddID'); 
    var e3 = $('#ddID').val(); 
    var e4 = $('#ddID').text(); 

Wenn ich diese Werte console.log bin ich diese Ergebnisse bekommen würde? Dieser Codeblock ist innerhalb eines ‚.Dann‘ Funktionsaufruf beispiels:

$.when(...).then(function(...) 
    <Here is the code> 
); 

EDIT: Es war ein Tippfehler in der Post, die nun behoben worden sind. Dies ist nicht die Ursache meines Problems.

Ich sollte auch erwähnen, dass ich dieses div zu einem ContentPane über das Dojo-Toolkit hinzufügen und ich Dropdown-Menü im DOM über das Inspektionswerkzeug in Chrom sehen kann.

+5

Es gibt einen Tippfehler im Code in Zeile var e = document.getElemetnById ('ddID') ;: seine 'getElementById' –

+3

Bitte verwenden Sie die Konsole zum Debuggen. –

+1

Abgesehen davon haben Sie einen Syntaxfehler und wie erwähnt einen Tippfehler in 'getElemetnById': Warum sind Sie sicher, dass' console.log (e2) 'Ihr Element anzeigt? Das Ergebnis von '$ ('# ddID')' ist nicht 'null' oder 'undefiniert', auch wenn kein Element gefunden wird, weil '$ (...)' eine Ergebnismenge zurückgibt, die null oder mehr Elemente enthält. Wenn 'document.getElementById ('ddID');' 'null 'ist, dann ist' $ (' # ddID '). Length' '0'. –

Antwort

3

Sie werden nicht Auswahlbox Objekt erhalten, indem document.getElementById mit (‚DDID‘) da Sie Ihr Objekt zu einem Objekt hinzugefügt hat in Dokument Sie Objektauswahlfeld aus dd Objekt erhalten dd.childNodes unter Verwendung [1]

0

getDropDown erstellt ein Element mit dieser ID, fügt es in ein div ein und gibt dann div zurück.

Es fügt keines dieser Elemente zu irgendeinem Element im document hinzu.

Wenn Sie also das Dokument nach einem Element mit der passenden ID suchen, ist es nicht vorhanden.

+0

Ich verwende Dojo für dieses Projekt und füge das div an ein ContentPane an. Ist das wichtig? Ich nehme an, Dojo fügt es dem DOM hinzu, da ich das Drop-Down-Element mit dem Inspect-Tool in Chrome sehen kann. – Edvin

+0

@Edvin - Der von Ihnen bereitgestellte Code fügt ihn dem Dokument überhaupt nicht hinzu. Vielleicht fügt der Code, den Sie uns nicht gezeigt haben, es zu spät hinzu. – Quentin

Verwandte Themen