私は一日中回答を探していましたが、まだ運がありません。これが私の最初の質問は、(...しかし、絶望のうち)ここにある:動的に作成されたドロップダウンのカスタム属性値を別の要素に追加する
<tr taskId="(#=obj.task.id#)" assigId="(#=obj.assig.id#)" class="assigEditRow" >
<td><select name="resourceId" class="get-resources formElements"></select></td>
<td><span class="resources-units"></span></td>
<td><span class="resources-quantity"></span></td>
<td><input type="text" placeholder="Required Q"></td>
<td align="center"><span class="teamworkIcon delAssig" style="cursor: pointer">d</span></td>
</tr>
そして、ここでJSのビット:
'use strict';
function addResourceFunction(){
let ResourcesJSON = (json) => {
let Resources = json;
console.log(Resources);
let contactsLength = json.length;
let arrayCounter = -1;
let resID;
let resName;
let resUnit;
let resQuantity;
let Option = $('<option />');
let assignedID = $('tr.assigEditRow:last').attr("assigId");
while(arrayCounter <= contactsLength) {
arrayCounter++;
resID = Resources[arrayCounter].ID;
resName = Resources[arrayCounter].name;
resUnit = Resources[arrayCounter].unit;
resQuantity = Resources[arrayCounter].quantity;
$('.assigEditRow').last().find('select').append($('<option>', {
value: resName.toString(),
text: resName.toString(),
resourceID: resID.toString(),
resourceUnit: resUnit.toString(),
resourceQuantity: resQuantity.toString()
}));
}
}
$.getJSON("MY JSON URL IS HERE", function(json) {
ResourcesJSON(json);
});
};
私はここにHTMLのビットを持っています
実際にここで何が起こっているのですか?私はURL(JSON配列)からデータを取得し、クリックするとaddResourceFunction()をトリガーして新しいテーブル行を作成し、配列から渡されたオプションで新しいselectを追加します。私のHTMLマークアップから分かるように、select入力はtd.get-resourcesに置かれ、そのすべてがうまくいきます。私は私の日付を設定し、私は選択フィールドを埋めるとすべての良い仕事。私は多くの行を追加することができます/私が望むようにドロップダウンを選択します。また、すべてのオプションにはカスタム属性がいくつかあります(上記のJSコードで確認できます)。これらの属性の値を行の2番目と3番目の列に追加します(HTMLではspan.resources-unitsおよびspan.resources-quantity)。 1つの選択ドロップダウンでは、その行の単位と量だけが変更されることを意味しているわけではありません。以下はそのコードです:
let idCounter = 1;
$(document).on('change', '.get-resources', function() {
$('.assigEditRow').last().find('.resources-units').attr('id', 'units-' + idCounter);
$('.assigEditRow').last().find('.resources-quantity').attr('id', 'quantity-' + idCounter);
this.resourceUn = $(".get-resources option:selected").attr("resourceUnit");
this.resourceQuant = $(".get-resources option:selected").attr("resourceQuantity");
$('#units-' + idCounter).append(this.resourceUn);
$('#quantity-' + idCounter).append(this.resourceQuant);
idCounter++;
});
私は1つの選択入力を追加してオプションを変更すると、そのことが機能します。別のオプションを追加してオプションを変更すると、最初のものの属性が取得されます。もっと同じものを加える。私が変更したものは、最初に追加された項目の属性値をとります。
ここではあまりにも複雑にしていないことを願っています。私はSOのルールを破ったら謝罪します。それは結局のところ、最初の質問です。 ありがとうございました!
ありがとう@Giannis Tzagarakis;) –