我正在尝试在重力表单中制作一个使用列表字段的注册表单,以便可以一次注册多个人。 问题是我还需要获得注册人数的数量,以便我可以为每个人收取费用。
使用 JS,我将如何计算列表中的行数并将值传递给另一个字段? 还是有更好的方法可以做到这一点?
更新:
根据黑曜石时代的回答,这会偶尔刷新并输出到数量字段:
function updateQty() {
var rows = document.querySelectorAll('.gfield_list_group').length; // Count rows
var qty = document.querySelector('.ginput_quantity'); // Define output location
qty.value = rows; // Put row count in location
setTimeout(updateQty, 2000); // Repeat every 2 seconds
}
updateQty(); // Execute
我不熟悉特定插件的输出标记,但您可以使用类似.querySelectorAll()
的东西简单地抓取所有需要的元素。从这里开始,通过简单地查询它们的数量来查找它们的数量是微不足道的.length
.如果将此数字分配给变量,则可以稍后在将其插入回其他字段时引用它 - 这可以通过使用变量更新元素的.innerHTML
来完成。
这可以从下面看出:
const amount = document.querySelectorAll('.row').length;
const output = document.querySelector('.output');
output.innerHTML = amount;
<div class="row">One</div>
<div class="row">Two</div>
<div class="row">Three</div>
<div class="row">Four</div>
<br />
<div class="output"></div>
<script>
jQuery.expr[':'].hasValue = function(el, index, match) {
return el.value != "";
};
function updateQty() {
var listFieldID = '#field_85_12 .gfield_list_12_cell1 input:hasValue';
var totalFieldID = '#input_85_35';
var totalRows = $(listFieldID).length; // Count rows
var totalField = $(totalFieldID);
console.log(totalRows); // For testing
$( totalField ).val( totalRows +1 ).change();
setTimeout(updateQty, 3000); // Repeat every 2 seconds
}
updateQty(); // Execute
</script>