如何使用jQuery trigger.click传递变量重新打开Bootstrap模态框
解决方案
问题原因
你当前使用trigger('click')无法正常生效的核心原因是:Bootstrap模态框的show.bs.modal事件依赖event.relatedTarget属性获取触发元素,而jQuery模拟的点击事件不会自动填充该属性,导致你的回调函数无法拿到表格行的自定义数据,无法完成表单填充。
方案1:最小改动适配(推荐)
直接调用Bootstrap模态框的原生show方法,手动传入目标行作为触发源,不需要模拟点击,原有模态框事件回调逻辑完全不需要修改:
修改PHP错误触发部分代码:
<?php if (session()->has('error_message')) : ?> <script> // 选中目标表格行 const targetTr = $('#j<?= old('job_no') ?>'); // 手动触发模态框显示,第二个参数传入触发元素作为relatedTarget $('#myModal').modal('show', targetTr[0]); </script> <?php endif ?>
方案2:抽离公共函数(可维护性更高)
把模态框填充逻辑抽为独立公共函数,不管是用户点击还是错误回填都可以直接调用,逻辑更清晰:
1. 修改前端JS逻辑
// 抽离公共模态框填充函数 function fillModal(trElem) { const client_name = trElem.data('cln'); const location = trElem.data('loc') ; const descr = trElem.data('des'); const modal = $('<?= lang($lang.'.modaltarget') ?>'); modal.find('.modal-body #client_name').val(client_name); modal.find('.modal-body #location').val(location); modal.find('.modal-body #descr').val(descr); modal.find('#body_message').hide(); modal.find('#body_content').show(); } // 原有模态框触发回调保留,调用公共函数 $('<?= lang($lang.'.modaltarget') ?>').on('show.bs.modal', function (event) { const tr = $(event.relatedTarget); fillModal(tr); });
2. 修改PHP错误触发部分代码
<?php if (session()->has('error_message')) : ?> <script> const targetTr = $('#j<?= old('job_no') ?>'); // 直接调用填充函数再打开模态框即可 fillModal(targetTr); $('#myModal').modal('show'); </script> <?php endif ?>
注意事项
请确保old('job_no')返回值和表格行ID的后缀匹配,比如行ID为j422时old('job_no')需返回422,否则选择器无法定位到目标行。
内容的提问来源于stack exchange,提问作者user3794393
相关产品推荐
相关产品推荐

