Javascript:捕获要在Laravel应用

时间:2016-07-06 10:35:02

标签: javascript laravel bootstrap-modal

我有一个带有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技能低于平均水平......

1 个答案:

答案 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本身,第三个包含字符串的其余部分。