I’m trying to create a data collection page with multiple forms that each use the same function to append an array. the problem is that I can’t figure out how to access the data on the forms.
What I have so far:
Notice that the JavaScript code adds events to the buttons of each form and the productList();
function is supposed to extract the values from the hidden input controls.
document.addEventListener("DOMContentLoaded", () => {
const product1 = document.querySelector("#productId_1")
const product2 = document.querySelector("#productId_2")
const product3 = document.querySelector("#productId_3")
product1.addEventListener("submit", e => {
e.preventDefault();
var formId = "#productId_1";
productList(formId);
});
product2.addEventListener("submit", e => {
e.preventDefault();
var formId = "#productId_2";
productList(formId);
});
product3.addEventListener("submit", e => {
e.preventDefault();
var formId = "#productId_3";
productList(formId);
});
});
function productList(formId) {
var a = document.getElementById(formId).getElementsByClassName("productId")[0];
//testing
alert(formId, a);
}
<div class="productContainer">
<h1 class="productTitle">Products:</h1>
<div class="container">
<form action="" class="product" id="productId_1">
<h1>balls</h1>
<p>a ball bering</p>
<input type="hidden" class="productId" value="item_1">
<button class="submit">Purchase</button>
</form>
</div>
<div class="container">
<form action="" class="product" id="productId_2">
<h1>balls</h1>
<p>a ball bering</p>
<input type="hidden" class="productId" value="item_2">
<button class="submit">Purchase</button>
</form>
</div>
<div class="container" class="product" id="productId_3">
<form action="" class="product">
<h1>balls</h1>
<p>a ball bering</p>
<input type="hidden" class="productId" value="item_3">
<button class="submit">Purchase</button>
</form>
</div>
</div>
3
Answers
getElementById
takes only theid
value, not the#
selector syntax. So this:should be this:
Additionally, you’ll find that
console.log
produces more useful information thanalert
. So this:should be this:
With that, the code is working.
formId
is theid
of the selected<form>
anda
is the hidden<input>
. You can get its value witha.value
.For example:
Here I assume you do not know all the id’s and you may have more elements (forms) with that class at a later point in time.
you must remove
#
from parameterformId
to works withdocument.getElementById
see live playground https://codepen.io/dimaslanjaka/pen/YzJMKJa