JavaScript 在提交迭代时通过 class 获取元素
JavaScript get elements by class on submit iteration
我正在尝试使用 flask 和 AJAX 遍历喜欢的表单。如果只有一个表单并且我使用按 id 获取元素,它就可以工作。迭代 class 时我在 JS 中做错了什么?
HTML:
<form class="like_form" method="POST">
<input type="hidden" name="user_id" value="{{session['logged_in']['id']}}">
<input type="hidden" name="like_id" value="32">
<input type="submit" class="small_submit" value="">
</form>
<form class="like_form" method="POST">
<input type="hidden" name="user_id" value="{{session['logged_in']['id']}}">
<input type="hidden" name="like_id" value="32">
<input type="submit" class="small_submit" value="">
</form>
var like_form = document.getElementsByClassName('like_form');
for(var i = 0; i < like_form.length; i++){
like_form[i].onsubmit = function(e){
e.preventDefault();
console.log("clicked form")
var form = new FormData(like_form)
fetch("http://localhost:5000/test/form", { method :'POST', body : form})
.then( response => response.json() )
.then( data => {
console.log(data)
console.log(data['stars'])
const stars = document.getElementById("stars")
stars.innerHTML = ` ${data['stars']}`
})
}
}
您需要获取一个个表单的表单数据,而不是表单集合。为了让它工作,我建议使用 for..of
循环,使用 let
来获取块范围:
for (let lform of like_form) {
lform.onsubmit = function(e) {
e.preventDefault();
console.log("clicked form");
var form = new FormData(lform); // <---
第二期是document.getElementById("stars")
。您的 HTML 中不存在该元素。此外,如果这应该是与表单相关的元素(每个表单一个),请注意 id
属性在 HTML 中应该是唯一的,因此您应该 select 这样元素不同。
最终不得不遍历索引:(
改变页面上的喜欢也非常有效!只是将索引用于提交和更改页面上的数字。参见 like_count[i].value
let like_form = document.getElementsByClassName('like_form');
let like_count = document.getElementsByClassName('like_count');
for(let i = 0; i < like_form.length; i++){
like_form[i].onsubmit = function(e){
e.preventDefault();
console.log("clicked form")
var form = new FormData(like_form[i])
fetch("http://localhost:5000/test/form", { method :'POST', body : form})
.then( response => response.json() )
.then( data => {
if (data['stars']){
console.log(data)
console.log(data['stars'])
const stars = document.getElementById("stars")
stars.innerHTML = ` ${data['stars']}`
like_count[i].value = ` ${data['num']}`
}
})
}
}
我正在尝试使用 flask 和 AJAX 遍历喜欢的表单。如果只有一个表单并且我使用按 id 获取元素,它就可以工作。迭代 class 时我在 JS 中做错了什么?
HTML:
<form class="like_form" method="POST">
<input type="hidden" name="user_id" value="{{session['logged_in']['id']}}">
<input type="hidden" name="like_id" value="32">
<input type="submit" class="small_submit" value="">
</form>
<form class="like_form" method="POST">
<input type="hidden" name="user_id" value="{{session['logged_in']['id']}}">
<input type="hidden" name="like_id" value="32">
<input type="submit" class="small_submit" value="">
</form>
var like_form = document.getElementsByClassName('like_form');
for(var i = 0; i < like_form.length; i++){
like_form[i].onsubmit = function(e){
e.preventDefault();
console.log("clicked form")
var form = new FormData(like_form)
fetch("http://localhost:5000/test/form", { method :'POST', body : form})
.then( response => response.json() )
.then( data => {
console.log(data)
console.log(data['stars'])
const stars = document.getElementById("stars")
stars.innerHTML = ` ${data['stars']}`
})
}
}
您需要获取一个个表单的表单数据,而不是表单集合。为了让它工作,我建议使用 for..of
循环,使用 let
来获取块范围:
for (let lform of like_form) {
lform.onsubmit = function(e) {
e.preventDefault();
console.log("clicked form");
var form = new FormData(lform); // <---
第二期是document.getElementById("stars")
。您的 HTML 中不存在该元素。此外,如果这应该是与表单相关的元素(每个表单一个),请注意 id
属性在 HTML 中应该是唯一的,因此您应该 select 这样元素不同。
最终不得不遍历索引:( 改变页面上的喜欢也非常有效!只是将索引用于提交和更改页面上的数字。参见 like_count[i].value
let like_form = document.getElementsByClassName('like_form');
let like_count = document.getElementsByClassName('like_count');
for(let i = 0; i < like_form.length; i++){
like_form[i].onsubmit = function(e){
e.preventDefault();
console.log("clicked form")
var form = new FormData(like_form[i])
fetch("http://localhost:5000/test/form", { method :'POST', body : form})
.then( response => response.json() )
.then( data => {
if (data['stars']){
console.log(data)
console.log(data['stars'])
const stars = document.getElementById("stars")
stars.innerHTML = ` ${data['stars']}`
like_count[i].value = ` ${data['num']}`
}
})
}
}