提问人:Astw41 提问时间:8/1/2022 最后编辑:Astw41 更新时间:8/1/2022 访问量:186
提交表单时,文件输入(标签)没有值 (AJAX)
File input (label) has no value when submitting the form (AJAX)
问:
我有一个表格。它有display:none,所以为了设置它的样式,我使用了一个标签。表单中的每个必需输入都有一个“必需”类。当它为空时,表单将不会发送,并且空输入周围有一个红色边框。问题是,当我尝试验证我的表单时(“必需”类在标签上,因为输入文件具有 display:none)并且表单验证读取它时,它总是空的(无论我是否上传文件)。<input type="file">
// head
<script>
$(function () {
$('#form').on('submit', function (e) {
e.preventDefault();
let sendForm = true;
$('.required').each(function(){
if ($(this).val() == ''){
$('#add').addClass('error');
$(this).addClass('error');
sendForm = false;
} else {
$(this).removeClass('error');
}
})
if (sendForm) {
$.ajax({
type: "post",
url: 'php/php.php',
data: new FormData(this),
processData: false,
contentType: false,
success: function () {
document.getElementById("text").innerHTML = "success";
document.getElementById("add").style.border = "2px solid green";
$("#add").fadeOut(3000);
},
error: function () {
document.getElementById("text").innerHTML = "error";
document.getElementById("add").style.border = "2px solid red";
}
});
}
});
});
</script>
<form id="form" method="POST" action="php/php.php" enctype="multipart/form-data".>
<input type="text" name="Name" id="name" class="required"><br>
Image (jpg, png):
<label for="upload_image" id="file_style" class="required">File</label>
<input type="file" style="display:none;" id="upload_image" name="Image" accept="image/*" onchange="loadFile(event)">
<br>
<img id="output">
<script>
var loadFile = function(event) {
var output = document.getElementById('output');
output.src = URL.createObjectURL(event.target.files[0]);
output.onload = function() {
URL.revokeObjectURL(output.src)
}
};
</script>
<input type="number" name="Ing1" class="required">
<input type="text" name="Ing2" class="required"><br>
<input type="submit" name="Add" id="add">
</form>
.error{
border: solid 12px red;
}
(这只是一个最小的工作示例,还有更多代码。这就是为什么有“无用”功能的原因。 我怎样才能做到,如果文件被上传,验证脚本不会将其视为未定义?
答:
1赞
Mina
8/1/2022
#1
首先,您没有名为“loadFile”的函数,我不确定您是否需要它。
其次,在 ,u 循环抛出 中,你需要获取与该标签关联的标签,所以一种解决方案是在获取标签的属性后通过获取它,然后通过 .$('.required').each
labels
input
id
for
files
input.files.length
.error{
border: solid 12px red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<head>
<script>
$(function () {
$('#form').on('submit', function (e) {
e.preventDefault();
let sendForm = true;
$('.required').each(function(index, label){
const input = document.getElementById(label.getAttribute('for'))
if (!input.files.length){
$('#add').addClass('error');
$(this).addClass('error');
sendForm = false;
} else {
$(this).removeClass('error');
$('#add').removeClass('error');
}
})
if (sendForm) {
$.ajax({
type: "post",
url: 'php/php.php',
data: new FormData(this),
processData: false,
contentType: false,
success: function () {
document.getElementById("text").innerHTML = "success";
document.getElementById("add").style.border = "2px solid green";
$("#add").fadeOut(3000);
},
error: function () {
document.getElementById("text").innerHTML = "error";
document.getElementById("add").style.border = "2px solid red";
}
});
}
});
});
</script>
</head>
<body>
<form id="form" method="POST" action="php/php.php" enctype="multipart/form-data".>
Image (jpg, png):
<label for="upload_image" id="file_style" class="required">File</label>
<input type="file" style="display:none;" id="upload_image" name="Image" accept="image/*">
<br>
<input type="submit" name="Add" id="add">
<div id="text"></div>
</form>
</body>
评论
0赞
Astw41
8/1/2022
我编辑了我的帖子。有更多的代码、输入等。我只是想举一个最小的工作例子。我真的不确定如何更改您的代码以使其正常工作(目前表单未发送,并且没有其他操作,例如添加“错误”类)。
1赞
Astw41
8/1/2022
#2
我想我找到了解决方案。我添加了这段代码:
$('.required2').each(function(){
if ($(this).val() == ''){
$('#file_style').addClass('error');
sendForm = false;
} else {
$('#file_style').removeClass('error');
}
})
进入我的提交功能。我需要更改一些东西以满足我的需要,但它可以正常工作。感谢大家的帮助和想法如何解决它!
评论