thymeleaf传值给bootstrap的modal

给模态框传值是一个很常见的需求,尤其是在操作表格的时候,添加、编辑数据都需要给模态框传值。一般如果是html的话很好处理,在Thymeleaf里因为值是动态的所以遇到点问题。

遇到的问题

这是模态框的定义:

<!-- 修改数据 -->
<div class="modal fade" id="edit_bill" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <p>新增数据</p>
            </div>
            <div class="modal-body">
                <form th:action="@{/bill/edit}" method="post">
                    <div class="form-group">

                        <div class="form-group">
                            <label for="billId1">id</label>
                            <input type="text" name="billId" class="form-control" id="billId" placeholder="">
                        </div>
                    <button type="submit" class="btn btn-default">提交表单</button>
                </form>
            </div>
            <div class="modal-footer">
                <button type="submit" class="btn btn-default" data-dismiss="modal">关闭
                </button>
            </div>
        </div>
    </div>
</div>

这是按钮的定义:

<tr th:if="${not #lists.isEmpty(result.getData().getDataList())}"
    th:each="bill, stat: ${result.getData().getDataList()}">
    <td style="display: none" th:text="${bill.billId}">Test001</td>
    <td>
        <div class="btn-group">
            <button id="edit" class="btn btn-info" data-toggle="modal" data-target="#edit_bill" th:attr="data-bill-id=${bill.billId}">修改</button>
        </div>
    </td>
</tr>

想在点击修改按钮的时候将 billId 这个值传到弹出框里。

值得注意的是Thymeleaf中data-*的写法:

<!-- 不是 -->
data-bill-id="${bill.billId}"

<!-- 而是 -->
th:attr="data-bill-id=${bill.billId}"

方法一

点击按钮的时候执行通过事件取值,但是我没成功,甚至连log都没输出,应该是没有执行,不知道是不是和Thymeleaf有关。

$(document).ready(function()
    $('#edit_bill').on('show.bs.modal', function (event) {
        var billId = $(event.relatedTarget.data('bill-id');
        $(event.currentTarget).find('input[name="billId"]').val(billId);
    });
});

方法二

这种写法能成功取到值,对js不是很了解,看不出两者有什么差别。

$(document).on("click", "#edit", function() {
    var billId = $(this).data("bill-id");
    $("#billId").val(billId);
});