我正在为每个带有 jQuery 预览的图像添加一个按钮。如何操作按钮?
I am adding a button to each image with jQuery preview. How can I operate the buttons?
我可以毫无问题地预览许多图像。但是我不知道如何获取在上传部分单击的图像的值并使用 ajax?
发送
HTML:
<div>
<input type="file" name="file[]" id="images" multiple />
</div>
<ul id="prewiew">
</ul>
JavaScript:
$(document).ready(function () {
$('#images').on('change', function (e) {
//It prints the added pictures one by one on the page with a loop.
var files = e.target.files;
$.each(files, function (i, file) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (e) {
var template = '<li>' +
'<img src="' + e.target.result + '" width="50" height="50"> ' +
'<label>' + file.name + file.size + '</label> <input type="text" name="title">' +
' <button class="btn btn-sm btn-info upload">Yükle</button>' +
'</li>';
$('#prewiew').append(template);
$('#resim').val('');
};
});
});
$(document).on('click', '.upload', function () {
//How can I receive and transfer data when the button is clicked?
var file = $(this).closest('img');
var data = new FormData();
data.append('ImageFile', file);
$.ajax({
url: '/Home/ImagePost/',
type: 'POST',
data: data,
contentType: false,
processData: false,
success: function () {
},
});
});
总结:我正在预览多张图片。我想按上传按钮发送预览图片。
缺少的部分是发送图像文件时需要的 file
对象。
如果您使用全局引用维护文件数组,那么在发送时您将可以访问必要的文件对象。
唯一需要做的就是将按钮与其对应的 file
对象相关联。
// CHANGE: declare `files` as a global here:
let files;
// end CHANGE
$(document).ready(function () {
$('#images').on('change', function (e) {
//It prints the added pictures one by one on the page with a loop.
files = e.target.files;
$.each(files, function (i, file) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (e) {
// CHANGE: add a `data-fileindex` attribute to the button
// to associate button with its file object
var template = '<li>' +
'<img src="' + e.target.result + '" width="50" height="50"> ' +
'<label>' + file.name + file.size + '</label> <input type="text" name="title">' +
'<button ' +
' class="btn btn-sm btn-info upload"' +
' data-fileindex="' + i + '">' +
'Yükle</button>' +
'</li>';
// end CHANGE
$("#prewiew").append(template);
$("#resim").val('');
}
});
});
然后点击处理程序可以访问适当的 file
对象:
document.onclick = function (evt) {
const button = evt.target;
const iFile = Number(button.dataset.fileindex);
const file = files[iFile];
// using `file`, perform POST below
};
有关如何使用 ajax 上传文件的详细信息,请参阅现有 How can I upload files asynchronously?
我可以毫无问题地预览许多图像。但是我不知道如何获取在上传部分单击的图像的值并使用 ajax?
发送HTML:
<div>
<input type="file" name="file[]" id="images" multiple />
</div>
<ul id="prewiew">
</ul>
JavaScript:
$(document).ready(function () {
$('#images').on('change', function (e) {
//It prints the added pictures one by one on the page with a loop.
var files = e.target.files;
$.each(files, function (i, file) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (e) {
var template = '<li>' +
'<img src="' + e.target.result + '" width="50" height="50"> ' +
'<label>' + file.name + file.size + '</label> <input type="text" name="title">' +
' <button class="btn btn-sm btn-info upload">Yükle</button>' +
'</li>';
$('#prewiew').append(template);
$('#resim').val('');
};
});
});
$(document).on('click', '.upload', function () {
//How can I receive and transfer data when the button is clicked?
var file = $(this).closest('img');
var data = new FormData();
data.append('ImageFile', file);
$.ajax({
url: '/Home/ImagePost/',
type: 'POST',
data: data,
contentType: false,
processData: false,
success: function () {
},
});
});
总结:我正在预览多张图片。我想按上传按钮发送预览图片。
缺少的部分是发送图像文件时需要的 file
对象。
如果您使用全局引用维护文件数组,那么在发送时您将可以访问必要的文件对象。
唯一需要做的就是将按钮与其对应的 file
对象相关联。
// CHANGE: declare `files` as a global here:
let files;
// end CHANGE
$(document).ready(function () {
$('#images').on('change', function (e) {
//It prints the added pictures one by one on the page with a loop.
files = e.target.files;
$.each(files, function (i, file) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (e) {
// CHANGE: add a `data-fileindex` attribute to the button
// to associate button with its file object
var template = '<li>' +
'<img src="' + e.target.result + '" width="50" height="50"> ' +
'<label>' + file.name + file.size + '</label> <input type="text" name="title">' +
'<button ' +
' class="btn btn-sm btn-info upload"' +
' data-fileindex="' + i + '">' +
'Yükle</button>' +
'</li>';
// end CHANGE
$("#prewiew").append(template);
$("#resim").val('');
}
});
});
然后点击处理程序可以访问适当的 file
对象:
document.onclick = function (evt) {
const button = evt.target;
const iFile = Number(button.dataset.fileindex);
const file = files[iFile];
// using `file`, perform POST below
};
有关如何使用 ajax 上传文件的详细信息,请参阅现有 How can I upload files asynchronously?