2015-11-14 77 views
0

我正在构建一个HTML表单,并且对于其中的一个部分,div内的一组HTML输入字段需要被推送到一个数组。 div和所有字段在创建时都会获得唯一的ID /名称 - 特别是其中一个输入是select。如何使用jQuery访问存储在数组中的元素?

所有这些工作正常 - 字段被创建并推送到数组,一切id'd正确等,但我似乎无法访问选择元素的jQuery更改函数应该来之后,在字段创建后。我测试了一个内联Javascript“onchange = myFunction()”类型的东西,这是能够访问选择元素 - 我得到它为什么这个工程,但它不会是一个可接受的解决方案...我真的需要使用$ (“#id”)。更改功能。

如何使用jQuery访问存储在数组中的select元素?

this['input_array' + siteName] = []; 

for (y = 0; y < numberFound; y++){ 
this['input_array' + siteName].push('<div id="'+routeValue+''+siteName+'Details'+y+'" class="details">Species: <select id="'+siteName+'Species'+y+'" name="species['+y+']" data-speciesNumber="'+y+'">'+speciesList+'</select></div>); 

    $("#"+siteName+"Species"+y+"").change(function(){ 
     species = this.value; 
     speciesNumber = this.getAttribute("data-speciesNumber"); 
     siteSpeciesNumber = displayName + "" + species + "" + speciesNumber; 
     document.getElementById(""+siteName+"compileField"+speciesNumber+"").value = siteSpeciesNumber; 
     }); 

     }; 

     $("#"+routeValue+""+siteName+"Details").append(this['input_array' + siteName]); 
+0

你的代码是什么? – ashkufaraz

+1

*我会尽量简单地解析它,因为我的代码有点混乱,宁愿不必让任何人试图通过它来阻止它。*阅读:http:// stackoverflow。 com/help/mcve如果你不显示至少最小的代码和意图,就不可能找出问题所在。 – Shashank

+2

而不是'$(“#id”)。change';去'$(document).on(“change”,“#id”,function(){...你的代码...});' – vijayP

回答

1

问题不在于select在数组内,而在于它尚未附加到DOM。

尝试附加事件处理程序作为元素的一部分。现在当jQuery将元素插入到文档中时,事件绑定就被注册了。

function $newSelect(y) { 
    return $('<select />', { 
     html: speciesList, 
     id: siteName + 'Species' + y, 
     name: 'species[' + y + ']', 
     data: { 
      speciesNumber: y 
     }, 
     on: { 
      change: function(){ 
       species = this.value; 
       speciesNumber = this.getAttribute("data-speciesNumber"); 
       siteSpeciesNumber = displayName + "" + species + "" + speciesNumber; 
       document.getElementById(""+siteName+"compileField"+speciesNumber+"").value = siteSpeciesNumber; 
      } 
     } 
    } 
} 
function $newField (idNum) { 
    return $("<div id="'+routeValue+''+siteName+'Details'+y+'" class="details"></div>", { 
     html: $newSelect(idNum) 
    }); 
} 
this['input_array' + siteName] = []; 

for (y = 0; y < numberFound; y++){ 
    this['input_array' + siteName].push($newField(y)); 
}; 

    $("#"+routeValue+""+siteName+"Details").append(this['input_array' + siteName]); 
+0

或者,您可以将您的事件处理程序附加到文档而不是元素。 –

+0

太棒了,谢谢。上面的vijayP的评论确实有效,但这对我的情况来说是更好的答案,而且总的来说更全面。我也很欣赏这个解释。 – skwidbreth