我正在使用百里香生成一张表,该表代表一个对象列表(小吃)。每份小吃都有许多票数与之相关。我希望每个小吃都有一个按钮,以便用户可以对其投票,增加显示的投票数,然后单击提交按钮后进行更新
<table class="table table-striped">
<thead>
<tr>
<th>Snacks</th>
<th>Last Date Purchased</th>
<th>Votes</th>
<th>Up Vote</th>
</tr>
</thead>
<tbody>
<tr th:each="snack,iterStat : ${snacksuggested}">
<td th:text="${snack.name}"></td>
<td th:text="${snack.lastPurchaseDate}"></td>
<td th:text="${snack.votes}"></td>
<td>
<button class="btn btn-default" th:id="${'voteBtn_'+(iterStat.count -1)}" th:text="${snack.name} +' Vote'">Up Vote</button>
</td>
</tr>
</tbody>
</table>
如何参考特定的小吃?
我在哪里放置javascript函数定义?
以及如何在单击按钮时更新显示的投票计数?
PS。我正在使用Spring
最佳答案
我没有在春季使用百里香叶。我在jsp页面上使用过jstl。因此,我正在从我的角度向您解释。首先,您应该为要从Javascript / Jquery生成的每个元素提供ID。
因此,回答您的问题:
我们将使用class vote_button
引用小吃。每种小吃都将使用相同的类。
您可以将jquery / javascript函数放在脚本标记内的代码末尾,以确保在JQuery启动之前已加载DOM。
您可以为每个包含id
的按钮添加一个值。然后,在每次单击时,您都可以获取该id
并将其用于引用投票计数。
<tr th:each="snack,iterStat : ${snacksuggested}">
<td th:text="${snack.name}" id="snackname_${iterStat.count-1}"></td>
<td th:text="${snack.lastPurchaseDate} id="purchasedate_${iterStat.count-1}"></td>
<td th:text="${snack.votes} id="votes_${iterStat.count-1}"></td>
<td>
<button class="btn btn-default vote_button" value="${'voteBtn_'+(iterStat.count -1)}" th:id="${'voteBtn_'+(iterStat.count -1)}" th:text="${snack.name} +' Vote'">Up Vote</button>
</td>
</tr>
在为表的每个元素分配了ID之后,现在该编写Jquery / Javascript代码了。我们将不得不使用一个类来访问不同的投票按钮。
$( document ).ready(function() {
$(".vote_button").on('click', function() {
var id = $(this).val();
var idArray = id.split('_');
var voteId= idArray[1];
var currentVal = $("#votes_"+voteId).html();
$("#votes_"+voteId).html(currentVal+1);
});
});
我遇到了您面临的类似情况,这就是我解决的方法。希望对您有帮助。
不建议动态绑定对象。我所做的是,我为每行
vote_button
提供了相同的类,然后将该类应用于每个动态创建的元素。每次单击votebutton
时,我们都可以访问按钮的值或作为vote_id
生成的按钮的ID(名称由下划线和ID分隔)。通过拆分此值,我们可以获取要引用的行的id
。我们可以通过此id
访问该行的任何值,因为每个<td>
的名称为name_id
(如投票_1,小吃名_1),因为在每一行中,下划线后的数字将相同,并且仅是该位置行。关于javascript - 在 thymeleaf table 中动态创建按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42477225/