2016-05-11 161 views
-4

我一直在尝试通过javascript从“选择”元素中检索选定的值。我甚至无法使用jQuery或document.getElementById()从DOM获取元素。 这里是我的代码:无法通过ID获取HTML元素

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(); 

如果我CONSOLE.LOG这些价值,我会得到这些结果:上什么可能导致此问题

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

任何的IDE? 此的码块是“然后”函数调用e.g内:

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

编辑:有其中现在已经固定后一个错字。这不是我的问题的根源。

我还应该提到,我通过Dojo工具包将此div添加到ContentPane,并且我可以通过chrome中的检查工具在DOM中看到下拉列表。

+5

有一个代码行上的错误var e = document.getElemetnById('ddID');: 其'getElementById' –

+3

请使用控制台进行调试。 –

+1

除此之外,你有一个语法错误,并提到'getElemetnById'中的拼写错误:为什么你确定'console.log(e2)'显示你的元素?即使没有找到元素,'$('#ddID')'的结果也不会是'null'或'undefined',因为$(...)返回一个包含零个或多个元素的结果集。如果'document.getElementById('ddID');'为'null',那么'$('#ddID')。length'将为'0'。 –

回答

3

你不会使用的document.getElementById获取选择框对象(“ddID”) 因为你没有添加你的对象以文件 任何对象,您将使用dd.childNodes得到DD对象选择框对象[1]

0

getDropDown使用该ID创建一个元素,将其放入div中,然后返回div。

它从不将任何元素添加到document中的任何元素。

因此,当您在文档中搜索具有匹配id的元素时,它不在那里。

+0

我在此项目中使用Dojo并将div附加到ContentPane。这很重要吗?我认为dojo将它添加到DOM,因为我可以在Chrome中使用检查工具查看下拉元素。 – Edvin

+0

@Edvin - 您提供的代码根本不会将其添加到文档中。也许你没有向我们展示过的代码添加太晚了。 – Quentin