我有一个带有Javascript功能的Laravel应用程序,它捕获了一些我用来动态填充模态框的数据。
$(function() {
$('#edit-auction-modal').on("show.bs.modal", function (e) {
var auctionId = $(e.relatedTarget).data('id');
console.log(auctionId);
//auctionId has the correct value for the selected auction. This needs to be used in the View file
});
});
在视图文件中,我有一个带有表单的模式框(用于更新字段)。
<div id="edit-auction-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="panel panel-info">
<div class="panel-heading">
<div class="panel-title" id="auctionLabel"></div>
</div>
</div>
<div class="modal-body edit-content" style="padding-top:10px">
<form method="POST" action="{!! route('admin_auctions_update', ['id' => auctionId ]) !!}">
{{ csrf_field() }}
{{ method_field('PUT') }}
....
</form>
使用上面的代码,在尝试发送到'auction / auctionId / update'而不是'auction / 1 / update'或'auction / 2 / update'时,没有任何内容会更新
如何更改此设置以便在视图中使用auction0id(来自JS文件)的值?
我认为应该是微不足道的,但我的JS技能低于平均水平......
答案 0 :(得分:2)
您可以尝试这样的事情:
$(function() {
$('#edit-auction-modal').on("show.bs.modal", function (e) {
var auctionId = $(e.relatedTarget).data('id');
var pattern = /(auctions\/)(.+)(\/update)/;
var action = $('form').attr('action');
$('form').attr('action', action.replace(pattern, "$1" + auctionId + "$3"));
});
});
说明:
视图处理服务器端并定义最初发送到浏览器的html。在此之后,您不会运行任何PHP代码。由于客户端事件仅存在auctionId
,因此您修改action
属性的唯一工具是JavaScript。
因此,在视图中,您只需包含JS脚本,我假设您已经存在。此外,您可以将原始操作写为{!! route('admin_auctions_update', ['id' => 0 ]) !!}
(0
作为默认占位符值)。
最后正则表达式解释:括号定义捕获组,然后您可以按编号访问它们。因此,第一个包含要替换的id之前的字符串内容,第二个包含id本身,第三个包含字符串的其余部分。