数据索引 NodeList.Foreach JavaScript

data-index NodeList.Foreach JavaScript

我正在尝试根据我的数据索引为每个 adesaoTest 字段添加 for 或 foreach 值

我需要获取第二个索引值来做计算

JavaScript

function calculaAdesao() {

adesao = 0.00;

const totalAdesao = document.querySelectorAll('.quota-row');

totalAdesao.forEach(adesaoTest => {
    
    var index = adesaoTest.getAttribute('data-index');

    var entrada = document.getElementById(`quota-entrada-${index}`);
    var parcelas = document.getElementById(`quota-parcelas-${index}`);
    var adesaoTest = document.getElementById(`quota-adesao-${index}`);

        adesao = parseFloat(entrada.value) / parcelas.value;
        adesaoTest.value = adesao;
    
})

}

第一次代码是运行,编译正常 与第一个索引 等于 0.

生成第一个计算后,我立即根据下面的代码生成下一个元素

function addQuotaHtml() {
    var quotasDiv = document.getElementById('quotas');

const id = quotasDiv.querySelectorAll('.row').length + 1;
var quotaPrincipal = document.getElementById('quota-principal');

const request = new Request('/configuracoes/listFormaPagamento/json', { method: 'POST' });
fetch(request)
    .then(res => {
        res.json()
            .then(data => {

                var html = `<div class="row quota-row" data-index="${id}">

            <div class="col-8" id="quota-${id}" >

                <div>
                    <div class="col-xs-2">
                    <span>Entrada ${(id + 1)}</span>
                        <input onblur="calculaRestante(this)" type="text" data-index="${id}" id="quota-entrada-${id}" required="" name="entrada[]" placeholder="Primeira Parte" id="valor8" value="0"> 
                    </div>

                    <div class="col-xs-2 dateInput">
                        <span>Forma de Pagamento</span>
                        <select onchange="onChangeFormaPagamento(this)" data-index="${id}" id="quota-forma-pagamento-${id}" name="forma_pagamento[]">

                            <option value="">Selecione a forma de pagamento</option> 
                            
                            ${data.map(forma_pagamento => {
                    return `<option value="${forma_pagamento.id_formas_pagamento}"> ${forma_pagamento.forma_pagamento} </option>`
                })}

                        </select>
                    </div>

                    <div class="col-xs-1 dateInput">
                        <span>Parcelas</span>
                        <select data-index="${id}" id="quota-parcelas-${id}"  onchange="calculaAdesao()" name="parcelas[]" >
                                <option value=""></option>
                        </select>
                    </div>
                    
                    <div class="col-xs-2">
                        <span>Vencimento</span>
                        
                        <input data-index="${id}" type="date" required="" id="quota-vencimento-${id}" name="vencimento[]" placeholder="Entrada">
                        
                    </div>   
                    <div class="col-xs-2">
                        <span>Adesão</span>
                        <input data-index="${id}" type="text" required="" id="quota-adesao-${id} "name="adesao[]" placeholder="Valor de entrada" id="valor6">
                    </div>


                    <div class="col-xs-2">
                        <span style="color: red; cursor: pointer; margin-top: 3rem" onclick="deleteQuotaHtml(this)"><i class="fas fa-trash-alt"></i></span>
                    <div>
                </div>
            </div>
            </div>`;

                quotasDiv.innerHTML += html;


            })
    })

但是第二次当data-index = 1时它不计算并且 调试器一拿起adesaoTest变量,值都是NULL

经过这个过程之后它就变成了空值

对于每个字段 var adesaoTest = document.getElementById(quota-adesao-${index}) 必须执行上面的计算

注意: 我正在使用 fetch 添加将通过 for 或 foreach

的新条目

创建第二个元素时,它在控制台中出现以下错误

控制台错误

调试器错误

谢谢大佬,请用下面的代码解决问题

JavaScript

function calculaAdesao() {
    
    const totalAdesao = document.querySelectorAll('.quota-row');
    
    totalAdesao.forEach(entrada => {
    adesao = 0.00;
      
      var index = entrada.getAttribute('data-index');
      var entrada = document.getElementById(`quota-entrada-${index}`);
      var parcelas = document.getElementById(`quota-parcelas-${index}`);
      let adesaoFinal = document.getElementById(`quota-adesao-${index}`);
      adesao = parseFloat(entrada.value) / parcelas.value;
      adesaoFinal.value = isNaN(adesao) ? "" : adesao;

    })
    
  }