我有一个页面,其中有多个表单调用相同的JavaScript函数。每个表单将图片发布到给定的数据库项,并具有引用该数据库项的ID(例如,id="form123")。当用户选择一张图片时,应该显示“旋转器”(表示正在上传文件),然后提交表单。
请注意,控制台未记录应传递给javascript函数的相同表单ID或旋转器ID。结果是,“旋转器”显示在错误的表单上(页面上的第一个),并且实际上没有提交表单。
问题是,无论哪个表单获得onchange事件(从客户端选择图片),浏览器总是传递第一个具有“onchange”的表单的变量。
function submitForm(formId, spinner) {
console.log(formId);
console.log(spinner);
setDisplay(document.getElementById(spinner), 'inline-block');
return document.forms.formId.submit();
};
function setDisplay(element, value) {
return element.style.display = value;
};
<form method="post" name="form28236" id="form28236" class="submit-image" action="/image/new" enctype="multipart/form-data">
<input type="hidden" name="on" value="28236">
<label for="image-file">Add photos</label>
<input type="file" id="image-file" name="image" onchange="submitForm('form28236', 'spinner28236')">
<div id="spinner28236" class="spinner"></div>
</form>
Console:
form28330
spinner28330
请注意,控制台未记录应传递给javascript函数的相同表单ID或旋转器ID。结果是,“旋转器”显示在错误的表单上(页面上的第一个),并且实际上没有提交表单。
return document.forms.formId.submit();
。可能应该是return document.forms[formId].submit();
。但不确定这是否是你的根本问题。 - Noah Freitas