当 Bootstrap 模式打开时如何调用函数?
How can I call a function when a Bootstrap modal is open?
我使用 Boostrap 3.7 和 Blade (Laravel 5.5)。
我试图在我的 boostrap 模式打开时显示 console.log('works')
,但它不起作用。
HTML :
@foreach(...)
...
<div class="modal fade" id="reservationModal" tabindex="-1" role="dialog" aria-labelledby="reservationModal" aria-hidden="true">
<div class="modal-dialog">
...
</div>
</div>
@endforeach
JS :
$('#reservationModal').on('shown.bs.modal', function (e) {
console.log('works');
});
我关注了这个文档:https://getbootstrap.com/docs/3.3/javascript/#modals
我已经读过:Calling a function on bootstrap modal open
感谢您的帮助!
编辑 1:
我用这段代码解决了问题:
$(document).on('show.bs.modal', '#reservationModal', function (e) {
console.log('works');
});
但是如何区分模态(因为它们进入 foreach
循环)?
类似于:
$(document).on('show.bs.modal', '#reservationModal-specificId', function (e) {
console.log('works');
});
正如@Rory McCrossan 在评论中指出的那样,id 重复是代码的关键问题。要解决此问题,您可以使用索引:
id="reservationModal-{{$loop->index}}"
如果您想调用每个模态,请使用这样的选择器开始:
$('[id^="reservationModal-"]').on('shown.bs.modal', function (e) {
console.log('works');
});
或者,仅使用索引选择器在特定模态上使用:
$('#reservationModal-3').on('shown.bs.modal', function (e) {
console.log('works');
});
我认为您的事件侦听器是在 HTML 打印之前创建的。
所以试试这个代码。
$(document).on('show.bs.modal', '#reservationModal', function (e) {
console.log('works');
});
$(document).on('show.bs.modal', '#reservationModal', function (e) {});
粗体字符将有助于识别您的模态
更新部分的答案
运行 循环并按如下方式创建模态
<div class="modal fade reservationModal" id="reservationModal1" tabindex="-1" role="dialog" aria-labelledby="reservationModal" aria-hidden="true">
<div class="modal-dialog">
...
</div>
</div>
<div class="modal fade reservationModal" id="reservationModal2" tabindex="-1" role="dialog" aria-labelledby="reservationModal" aria-hidden="true">
<div class="modal-dialog">
...
</div>
</div>
...... and so on
将 reservationModal 设为 class
并将 id 作为附加到它的增量值
$(document).on('show.bs.modal', '.reservationModal', function (e) {
console.log($(this).attr("id"));
});
我使用 Boostrap 3.7 和 Blade (Laravel 5.5)。
我试图在我的 boostrap 模式打开时显示 console.log('works')
,但它不起作用。
HTML :
@foreach(...)
...
<div class="modal fade" id="reservationModal" tabindex="-1" role="dialog" aria-labelledby="reservationModal" aria-hidden="true">
<div class="modal-dialog">
...
</div>
</div>
@endforeach
JS :
$('#reservationModal').on('shown.bs.modal', function (e) {
console.log('works');
});
我关注了这个文档:https://getbootstrap.com/docs/3.3/javascript/#modals
我已经读过:Calling a function on bootstrap modal open
感谢您的帮助!
编辑 1:
我用这段代码解决了问题:
$(document).on('show.bs.modal', '#reservationModal', function (e) {
console.log('works');
});
但是如何区分模态(因为它们进入 foreach
循环)?
类似于:
$(document).on('show.bs.modal', '#reservationModal-specificId', function (e) {
console.log('works');
});
正如@Rory McCrossan 在评论中指出的那样,id 重复是代码的关键问题。要解决此问题,您可以使用索引:
id="reservationModal-{{$loop->index}}"
如果您想调用每个模态,请使用这样的选择器开始:
$('[id^="reservationModal-"]').on('shown.bs.modal', function (e) {
console.log('works');
});
或者,仅使用索引选择器在特定模态上使用:
$('#reservationModal-3').on('shown.bs.modal', function (e) {
console.log('works');
});
我认为您的事件侦听器是在 HTML 打印之前创建的。 所以试试这个代码。
$(document).on('show.bs.modal', '#reservationModal', function (e) {
console.log('works');
});
$(document).on('show.bs.modal', '#reservationModal', function (e) {});
粗体字符将有助于识别您的模态
更新部分的答案
运行 循环并按如下方式创建模态
<div class="modal fade reservationModal" id="reservationModal1" tabindex="-1" role="dialog" aria-labelledby="reservationModal" aria-hidden="true">
<div class="modal-dialog">
...
</div>
</div>
<div class="modal fade reservationModal" id="reservationModal2" tabindex="-1" role="dialog" aria-labelledby="reservationModal" aria-hidden="true">
<div class="modal-dialog">
...
</div>
</div>
...... and so on
将 reservationModal 设为 class
并将 id 作为附加到它的增量值
$(document).on('show.bs.modal', '.reservationModal', function (e) {
console.log($(this).attr("id"));
});