根据select设置一个td的值(Javascript和Flask)

Set the value of a td according to select (Javascript and Flask)

提前为我糟糕的英语道歉。 我刚开始使用 Javascript 和 Flask,但我正在尝试开发一个应用程序来管理银行经理之间的客户转移。

到目前为止,我成功地创建了 table 与经理投资组合的公司,在此 table 上级可以 select 将接收该帐户的经理。在这一点上,当新经理被 selected 时,我创建了一个 javascript 函数来检查公司在新地点是否有帐户。该功能正在运行,但仅适用于第一行!!!

这是js脚本

<script>
            let destino_selec = document.getElementById("{{ row['ID_ROW_GRTE'] }}");
            let destino_cc = document.getElementById("cc_dest_{{ row['ID_ROW_GRTE'] }}");

            destino_selec.onchange = function(){
                inicial = destino_selec.value.indexOf("(");
                final = destino_selec.value.indexOf(")");
                cd_grte_para = destino_selec.value.substring(inicial+1,final);
                // alert(cd_grte_para);
            
                fetch('/select_cli/' + cd_grte_para).then(function(response){
                    response.json().then(function(data){
                        //let optionHTML = '<option value="" disabled selected>Selecione o Gerente</option>';
                        let optionHTML = '';
                        count  = Object.keys(data).length;
                        if (count > 0) {
                            optionHTML += '<i class="fa fa-check-circle" aria-hidden="true" style="color: green"></i>';
                        } else {
                            optionHTML += '<i class="fa fa-times-circle" aria-hidden="true" style="color: red"></i>';
                        }
                        // destino_cc.innerHTML = optionHTML;
                        destino_cc.innerHTML = optionHTML;

                        });
                    });
                }   
    </script>

这是html篇:


{% block main %}
<span><br></span>
<form action="" method="post">
    <div class="row">
        <div class="col-5"><h2 class="text-left" 
            style="padding: 10px ;border-width: 10px;border-left: solid #9d1047"><b>Solicitação de tranferências</b></h2></div>
        <div class="col-7" style="padding: 10px "><input type="submit" value="Solicitar" class="btn btn-primary fw-bold mb-2" 
            style="left: 86%; position:relative; z-index: 2; background-color: #9d1047; border-color:#9d1047"/></div>       
    </div>
    
<table id="data" class="tabela-historica">
    <thead>
        <tr>
            <th width=15%   rowspan=2   >Cliente    </th>
            <th width=19%   rowspan=2   >Origem     </th>
            <th width=1%    rowspan=2   >cc         </th>
            <th width=15%   colspan=2   >Saldo      </th>
            <th width=19%   rowspan=2   >Destino    </th>
            <th width=1%    rowspan=2   >cc         </th>
            <th width=10%   rowspan=2   >Movimento  </th>
            <th width=15%   rowspan=2   >Motivo     </th>
            <th width=5%    rowspan=2   ><span>Selecionar  </span><input type="checkbox" onClick="toggle(this)" /></th>
        </tr>
        <tr>
            <th>Atual</th>
            <th>Melhor Ponto</th>
        </tr>
    </thead>

    <tbody height: 100%>
        {% for row in tbl_cli %}
        <tr>
            <td>{{ row['NM_CLI'] }} <br> 
                {% if row['NM_CLI'] == row['NM_GRP_FAMILIAR']   %}
                    
                {% else %}
                    <b> Família: </b>{{ row['NM_GRP_FAMILIAR'] }}
                {% endif %}
                
                <!-- <b>Família: </b>{{ row['NM_GRP_FAMILIAR'] }} </td> -->
            </td>
            <td> <b>Ger: </b>{{row['NM_ABDO_GRTE_DE']}} ({{ row['CD_GRTE_DE'] }})<br> <b>Ag: </b> {{ row['NOMEAG_DE'] }} ({{row['CODAG_DE']}}) </td>
            <!-- <td>{{row['cc_orig']}} </td> -->
            
            <td style="text-align: center">
            {% if row['CTA_CORRENTE'] %}
                <i class="fa fa-check-circle" aria-hidden="true" style="color: green"></i>
            {% else %}
                <i class="fa fa-times-circle" aria-hidden="true" style="color: red"></i>
            {% endif %}
            </td>
            <td>{{row['SLD_TOT_MM']}} <br> <b>Fam: </b>{{row['SLD_TOT_FAMILIAR_MM']}} </td>
            <td>{{row['SLD_TOT_MAX_MM']}} <br> <b>Fam: </b>{{row['SLD_TOT_FAMILIAR_MAX_MM']}} </td>
            
            <td>
                <select class="form-select" style="font-size: 10px; width: 100%" name="ger_escolhido" id="{{ row['ID_ROW_GRTE'] }}">
                    <option value="" disabled selected>Selecione o gerente destino</option>
                    {% for ger in tbl_codger %}
                        <option style="font-size: 10px;" name="{{ ger['CHAVE'] }}"">{{ ger['CHAVE'] }}</option>
                    {% endfor %}
                </select>
            </td>
            <td id="cc_dest_{{ row['ID_ROW_GRTE'] }}" ></td>
            
            <td>if segmento <br> if agencia </td>
            <td> <textarea class="form-control" name="motivo" style="font-size: 10px;" placeholder="Descreva o motivo..."></textarea> </td>
            <td style="text-align: center;"><input type="checkbox" value="{{ row['ID_ROW_GRTE'] }}" name="boxes"/></td>
        </tr>
        {% endfor %}

    </tbody>
</table>
</form>

{% endblock %}

你能帮我指出我哪里出错了吗?

这样想

  1. 在您的 html 中,您正在遍历项目集合并根据这些项目创建行。

  2. 在您的脚本代码中,您没有循环。您只是创建了一个脚本代码实例。

  3. 要按原样使用您的代码,您有 2 个选择

a) 将该脚本代码附加到 html 的循环内,即您的 html 循环将创建 table 行并将脚本代码附加到它。

b) 保持 html 循环不变,然后将脚本代码放入循环中,即做类似

的事情
{% for row in tbl_cli %}
    <Script>.....
{% endif %}

  1. 更好的选择是更改您的脚本,使其在 class 上触发,即将您的脚本代码更改为如下所示。优点是您不必循环脚本(正如我之前提到的)。下面的脚本是说 - 找到 class 为 form-select 的所有元素,并为每个元素将代码附加到 onchange 事件。
document.querySelectorAll(".form-select").forEach(function(element) {
    element.onchange = ......
})

因为您的脚本很可能会 'exist' 在创建 table 行之前,您应该 'attach' 将其设置为与创建脚本同时存在的内容。这意味着你做类似

的事情
document.querySelectorAll("table#data tr.form-select").forEach(function(element) {
    element.onchange = ......
})