#javascript
Вопрос:
Я создаю динамически DIV и устанавливаю идентификатор на основе запроса на успех AJAX :
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: '{ goodsName: ' JSON.stringify(data.goodsName) '}',
url: "calendarView.aspx/getSparepartsFilter",
success: function (data, status, xhr) {
var divResult = $('#divResult');
divResult.empty();
$.each(data.d, function (i, v) {
divResult.append('<div class="col-lg-12 addPart" id="divAddPart" style="display:block; margin-bottom:3px; cursor:pointer; padding:5px 10px; color:#333; font-size:.8rem; text-decoration:none; border:1px solid #ccc; background:#fafafa ">' v.goodsName ' <i class="fa fa-rw fa-circle" style="color:black; margin-left:15px; margin-right:15px; font-size:.4rem;"></i> ' v.goodsCode ' <i class="fa fa-rw fa-circle" style="color:black; margin-left:15px; margin-right:15px; font-size:.4rem;"></i> Qty: ' v.nowStock ' Available <i class="fa fa-rw fa-circle" style="color:black; margin-left:15px; margin-right:15px; font-size:.4rem;"></i> <input type="number" value="1" width="20px"></input></div>');
count ;
}
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " textStatus); alert("Error: " XMLHttpRequest.responseText);
}
})
И я также создаю событие в один клик для этих динамически создаваемых DIV :
$(document).on('click', '#divAddPart', function () {//do something})
var e = document.getElementById("divAddPart");
var c = window.getComputedStyle(e).backgroundColor;
console.log(c);
if (c === "rgb(250, 250, 250)") {
document.getElementById("divAddPart").style.background = "#80c904";
} else {
document.getElementById("divAddPart").style.background = "#fafafa";
}
})
Эти события были назначены только первому созданному DIV, так как я не создавал идентификатор приращения для каждого DIV.
Мой вопрос в том, как создать идентификатор приращения для каждого DIV, а также назначить событие. Я думаю, что он должен создать counter
переменную и назначить счетчик позади <div id="divAddPart" counter ""></div>
Но как назначить событие для каждого идентификатора приращения ?
Я попытался обновить событие onclick и все равно ошибка :
for (let i = 0; i < counter.length; i ) {
$(document).on('click', '#divAddPart' i '', function () {
var e = document.getElementById("divAddPart" i "");
var c = window.getComputedStyle(e).backgroundColor;
console.log(c);
if (c === "rgb(250, 250, 250)") {
document.getElementById("divAddPart" i "").style.background = "#80c904";
} else {
document.getElementById("divAddPart" i "").style.background = "#fafafa";
}
})
}
Комментарии:
1. id=»divAddPart» может быть id=»divAddPart» счетчик и одновременно увеличивать этот счетчик (возможно, в следующей строке. Я бы также поместил onClick=»Некоторая функция(счетчик)» в эту строку и сделал вашу функцию onClick отдельной функцией, например, некоторую функцию(счетчик), которую нужно вызвать, используя счетчик в качестве параметра.
Ответ №1:
Вы могли бы создать функцию вместо динамического добавления onClick в div:
function someFunction(counter) {
var e = document.getElementById("divAddPart" counter);
var c = window.getComputedStyle(e).backgroundColor;
console.log(c);
if (c === "rgb(250, 250, 250)") {
document.getElementById("divAddPart" counter).style.background = "#80c904";
} else {
document.getElementById("divAddPart" counter).style.background = "#fafafa";
}}
И сделайте так, чтобы ваша строка добавления div вызывала эту функцию
divResult.append('<div class="col-lg-12 addPart" id="divAddPart" counter onClick="someFunction(counter)" style="display:block; margin-bottom:3px; cursor:pointer; padding:5px 10px; color:#333; font-size:.8rem; text-decoration:none; border:1px solid #ccc; background:#fafafa ">' v.goodsName ' <i class="fa fa-rw fa-circle" style="color:black; margin-left:15px; margin-right:15px; font-size:.4rem;"></i> ' v.goodsCode ' <i class="fa fa-rw fa-circle" style="color:black; margin-left:15px; margin-right:15px; font-size:.4rem;"></i> Qty: ' v.nowStock ' Available <i class="fa fa-rw fa-circle" style="color:black; margin-left:15px; margin-right:15px; font-size:.4rem;"></i> <input type="number" value="1" width="20px"></input></div>');