我有一个循环,其中填充了多个项目的页面。每个项目都有:
作为一个测试,我编写了一个函数,当单击该按钮时返回ID和计划名称。但是,对于列表中的所有项目,仅返回第一个项目的ID和计划名称。当我查看HTML时,正确的唯一ID会填充在隐藏字段中,因此我很难弄清楚为什么单击时会返回正确的ID。
请参见下面的代码:
EJS:
<% for (var i = 0; i < plans.length; i++) {%>
<div class="col-md-4" data-shuffle="item" data-groups="audio,video">
<form>
<a class="hover-move-up" href="#">
<img src="/img/portfolio/1.jpg" alt="screenshot">
<div class="text-center pt-5">
<h5 class="fw-5001 mb-0"><%= plans[i].plan_name %></h5>
<small class="small-5 text-lightest text-uppercase ls-2"><%= plans[i].regular_plan_cost %> | <%= plans[i].huddl_plan_cost %></small>
<br>
<input id="planID" name="ID" type="hidden" value="<%= plans[i]._id %>">
<input id="planName" name="planName" type="hidden" value="<%= plans[i].plan_name %>">
<button type="submit" class="btn btn-primary">Join</button>
</form>
</div>
</a>
</div>
<% } %>
JS:
var ID = document.getElementById("planID").value;
var planName = document.getElementById("planName").value;
$('button').on('click', function() {
alert(ID + ' ' + planName);
})
任何帮助弄清楚这一点的人都会感激的。
答案 0 :(得分:0)
看看您所拥有的表单标签,它没有正确放入壁橱。您需要将其移动到div和a标签下。也许这将解决此问题。
答案 1 :(得分:0)
使用此代码段。
<div class="text-center pt-5">
<h5 class="fw-5001 mb-0"><%= plans[i].plan_name %></h5>
<small class="small-5 text-lightest text-uppercase ls-2"><%= plans[i].regular_plan_cost %> | <%= plans[i].huddl_plan_cost %></small>
<br>
<input id="planID_<%= i %>" name="ID" type="hidden" value="<%= plans[i]._id %>">
<input id="planName_<%= i %>" name="planName" type="hidden" value="<%= plans[i].plan_name %>">
<button data-ref="<%= i %>" class="btn btn-primary">Join</button>
</form>
</div>
</a>
</div>
我刚刚在IDS中添加了一个增量器:
<input id="planID_<%= i %>"
<input id="planName_<%= i %>"
<button data-ref="<%= i %>"
因此,现在您有了唯一的ID。您还需要JavaScript来“提醒”吗?
这是一些其他代码。我没有对此进行测试,但是我的jQuery还是生锈的,但是希望这会给您您所需要的
Javascript:
$('button').each(function() {
$(this).on('click', function() {
myFN($(this).attr("data-ref"));
})
});
function myFN(val) {
var ID = document.getElementById("planID_" + val).value;
var planName = document.getElementById("planName_" + val).value;
console.log("VALUES: ", ID, planName);
}