2015-11-14 150 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