Заполнить текстовое поле на основе параметра выбора

Я пытаюсь получить значение «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);
    });
});
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте код ниже:

$("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> 

спасибо, теперь он может заполнять другие строки Harga, но обе строки получают последнее значение hargaJual из выбранной опции.

Ananda Pramono 10.04.2019 11:24

Не за что, вы тоже должны изменить это, например: <select class = "custom-select kodeSparepart" name = "kodeSparepart[]">

Zakaria Acharki 10.04.2019 11:25

Работает сейчас или еще нет?

Zakaria Acharki 10.04.2019 12:19

Все еще есть та же проблема, я думаю, это потому, что она вставляет значение hargaJual в класс .hargaJualTransaksi, и из-за этого все поля показывают одно и то же hargaJual. Но ваш ответ в основном отвечает на мой главный вопрос, так что спасибо за него :).

Ananda Pramono 10.04.2019 12:38

Пожалуйста, попробуйте $(this).closest('tr').find('.hargaJualTransaksi').val(price)‌​;

Zakaria Acharki 10.04.2019 12:40

Другие вопросы по теме