Я пытаюсь получить значение «hargaJual», когда выбираю какую-то опцию. Но когда я вставлю новую строку в таблицу и выберу новую опцию, она изменит только первую строку «Харга» и оставит вторую строку пустой.
Вот результат:
<td>
<select class = "custom-select" id = "kodeSparepart" name = "kodeSparepart[]">
<option value = ""> --Pilih Sparepart-- </option>";
@foreach($sparepart as $s) {
<option value = "{{ $s['kodeSparepart'] }}" data-price = "{{ $s->hargaJual }}"> {{ $s['namaSparepart'] }} </option>";
}
@endforeach
</select>
</td>
<td>
<input class = "form-control" type = "text" id = "hargaJualTransaksi" name = "hargaJualTransaksi[]" autocomplete = "off" readonly>
</td>
А вот мой джаваскрипт
//for insert new row in table
$(function(){
$('#addMore').on('click', function() {
var data = $("#tb tr:eq(1)").clone(true).appendTo("#tb");
data.find("input").val('');
});
$(document).on('click', '#remove', function() {
var trIndex = $(this).closest("tr").index();
if (trIndex>=1) {
$(this).closest("tr").remove();
} else {
alert("Sorry!! Can't remove first row!");
}
});
});
//fill hargaJualTransaksi field
$(function() {
$('#kodeSparepart').on('change', function(){
var price = $(this).children('option:selected').data('price');
$('#hargaJualTransaksi').val(price);
});
});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте код ниже:
$("body").on('click', '#kodeSparepart', function (event) {
var price = $(this).children('option:selected').data('price');
$('#hargaJualTransaksi').val(price);
}
Вам необходимо использовать делегирование событий, поскольку строки динамически отображаются в DOM:
$(function() {
$('body').on('change', '.kodeSparepart', function(){
var price = $(this).children('option:selected').data('price');
$('.hargaJualTransaksi').val(price);
});
});
ПРИМЕЧАНИЕ: Атрибут id должен быть уникальным, поэтому вам нужно изменить каждый kodeSparepart и hargaJualTransaksi на классы вместо идентификаторов, это будет примерно так:
<input class = "form-control hargaJualTransaksi" type = "text" name = "hargaJualTransaksi[]" autocomplete = "off" readonly>
Не за что, вы тоже должны изменить это, например: <select class = "custom-select kodeSparepart" name = "kodeSparepart[]">
Работает сейчас или еще нет?
Все еще есть та же проблема, я думаю, это потому, что она вставляет значение hargaJual в класс .hargaJualTransaksi, и из-за этого все поля показывают одно и то же hargaJual. Но ваш ответ в основном отвечает на мой главный вопрос, так что спасибо за него :).
Пожалуйста, попробуйте $(this).closest('tr').find('.hargaJualTransaksi').val(price);
спасибо, теперь он может заполнять другие строки Harga, но обе строки получают последнее значение hargaJual из выбранной опции.