You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XAMPP项目中Bootstrap模态框编辑无法读取新值致更新失败

问题原因及解决方案

核心问题

编辑模态窗口与新增模态窗口的表单元素使用了相同ID(如avime_vismed、avime_data),通过ID选择器取值时,jQuery只会返回页面中第一个匹配该ID的元素值,也就是新增模态窗口的初始值,而非编辑窗口中修改后的新值。

修复步骤

1. 给编辑模态窗口的表单元素设置唯一ID

为编辑窗口内的表单元素添加edit_前缀,确保ID唯一:

<div class="modal fade" id="editVismedModal" tabindex="-1" role="dialog" aria-labelledby="editVismedModalLabel">
    <!-- 其他代码不变 -->
    <div class="modal-body">
        <form id="editVismedForm">
            <input type="hidden" id="edit_avime_anag" name="avime_anag" value="<?php echo $id; ?>">
            <input type="hidden" id="edit_avime_codice" name="avime_codice" value="<?php echo $codice; ?>">
            <div class="form-group">
                <label for="edit_avime_vismed">Visita medica</label>
                <select class="form-control" id="edit_avime_vismed" name="avime_vismed" required>
                    <!-- 原有选项代码不变 -->
                </select>
            </div>
            <div class="form-group">
                <label for="edit_avime_data">Data visita</label>
                <input type="date" class="form-control" id="edit_avime_data" name="avime_data" required>
            </div>
            <!-- 其他代码不变 -->
        </form>
    </div>
    <!-- 其他代码不变 -->
</div>

2. 更新编辑窗口的数据填充逻辑

修改AJAX成功回调中的选择器,对应新的ID:

$('#editVismedModal').on('show.bs.modal', function(event) {
    var button = $(event.relatedTarget);
    var avime_codice = button.data('id');
    console.log('codice visita db', avime_codice);
    
    $.ajax({
        url: 'avime_edit_getdata.php',
        type: 'POST',
        data: { id: avime_codice },
        success: function(data) {
            if (data.error) {
                alert(data.error);
            } else {
                console.log('dati:',data);
                var vismed = typeof data === 'string' ? JSON.parse(data) : data;
                
                // 对应新ID填充数据
                $('.modal-body #edit_avime_vismed').val(vismed.avime_vismed);
                $('.modal-body #edit_avime_data').val(vismed.avime_data);
                $('.modal-body #edit_avime_codice').val(avime_codice);
            }
        },
        error: function() {
            alert('Errore durante il caricamento dei dati.');
        }
    });
});

3. 修改saveNewVismed函数的取值逻辑

根据操作类型区分读取新增/编辑窗口的元素值:

function saveNewVismed(operation) {
    console.log('entro in conferma');
    // 根据操作类型选择对应前缀
    var prefix = operation === 'edit' ? 'edit_' : '';
    var avime_vismed = document.getElementById(prefix + 'avime_vismed').value;
    var avime_data = document.getElementById(prefix + 'avime_data').value;
    var avime_anag = document.getElementById(prefix + 'avime_anag').value;
    var avime_codice = operation === 'edit' ? document.getElementById(prefix + 'avime_codice').value : null;
    
    console.log('codice', avime_codice);
    console.log('data', avime_data);
    console.log('vismed', avime_vismed);
    
    // 验证逻辑不变
    if (!avime_vismed || !avime_data) {
        $('#resultModalMessage').text('Compila tutti i campi obbligatori.');
        $('#resultModal').modal('show');
        return;
    }
    
    var url = operation === 'edit' ? 'avime_update.php' : 'avime_append.php';
    // AJAX请求逻辑不变
    $.ajax({
        url: url,
        type: 'POST',
        data: {
            avime_codice: avime_codice,
            avime_vismed: avime_vismed,
            avime_data: avime_data,
            avime_anag: avime_anag
        },
        success: function(response) {
            if (response === 'success') {
                var successMessage = operation === 'edit' 
                    ? 'Visita medica aggiornata con successo!' 
                    : 'Visita medica inserita con successo!';
                $('#resultModalMessage').text(successMessage);
                $('#resultModal').modal('show');

                if (operation !== 'edit') {
                    var insertedCodice = response; 
                    console.log('Nuovo codice visita:', insertedCodice);
                    avime_codice = insertedCodice;
                }
                updateVismedTable(avime_anag);
                var modale = operation === 'edit' 
                    ? '#editVismedModal' 
                    : '#newVismedModal';
                $(modale).modal('hide');
            } else {
                $('#resultModalMessage').text('Errore durante l\'inserimento della visita medica: ' + response);
                $('#resultModal').modal('show');
            }
            $('[data-toggle="tooltip"]').tooltip();
        },
        error: function() {
            $('#resultModalMessage').text('Errore di connessione con il server.');
            $('#resultModal').modal('show');
        }
    });
}

4. 同步调整按钮点击日志(可选)

如果需要保留按钮点击的日志输出,同步修改选择器:

$('#saveVismedButton').on('click', function () {
    var avime_vismed = $('#edit_avime_vismed').val();
    var avime_data = $('#edit_avime_data').val();
    console.log('Vismed click:', avime_vismed);
    console.log('Data click:', avime_data);
});

额外建议

  • 页面内所有元素ID必须唯一,避免选择器冲突。
  • 也可以通过给模态窗口内的表单添加专属类,结合模态窗口上下文取值,比如$('#editVismedModal .avime-input').val(),无需修改ID,灵活性更高。

内容的提问来源于stack exchange,提问作者Filippo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:29:49