我正在尝试通过点击某个元素中的现有图片来上传图片。
因此,用户将单击图像,将显示文件上载对话框,当用户从文件对话框中选择图像时,表单会自动提交表单并重新加载页面。
以下是我的一些代码:
$(document).ready(function() {
$('#profile').click(function(e){
$('#fileUploadField').click();
e.preventDefault();
});
header('Location: ' . $current_file);
});
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="profile" id="fileUploadField"> <input type="submit">
</form>
配置文件div是包含图像的位置
我已经有了显示图片的代码。我只需要打开对话框,然后关闭,提交表单和刷新页面。
这是我的其他代码:
<?php
if (isset($_FILES['profile']) === true) {
if (empty($_FILES['profile']['name']) === true) {
echo 'Please choose a file!';
} else {
$allowed = array('jpg', 'jpeg', 'gif', 'png');
$file_name = $_FILES['profile']['name'];
$file_extn = strtolower(end(explode('.', $file_name)));
$file_temp = $_FILES['profile']['tmp_name'];
if (in_array($file_extn, $allowed) === true) {
change_profile_image($session_user_id, $file_temp, $file_extn);
header('Location: ' . $current_file);
exit();
} else {
echo 'Incorrect file type. Allowed: ';
echo implode(', ', $allowed);
}
}
}
if (empty($user_data['picture']) === false) {
echo '<img src="', $user_data['picture'], '" alt="', $user_data['firstname'], '\'s Profile Image" style="height:100px">';
}
?>
答案 0 :(得分:5)
单击其他内容很难触发输入类型文件。您将遇到的最大问题是IE会将此视为安全问题,并且可能不允许您这样做(如果输入被隐藏)。要解决这个问题,你可以“淡化”图像背后的输入,这样当用户点击图像时,他们实际上是在点击文件输入。
你的HTML看起来像这样:
<div class="hiddenFileInputContainter">
<img class="fileDownload" src="/images/ico_upload.png">
<input type="file" name="fileUp" class="hidden" accept="image/*">
</div>
然后你需要将输入的不透明度设置为零,以便让它后面的图像可见,而不实际从页面中删除输入:
input[type='file'].hidden
{
margin: 0;
padding: 0;
position: absolute;
top: 0;
right: 0;
height: 100%;
font-size: 50px;
cursor: pointer;
opacity: 0;
-moz-opacity: 0;
filter: Alpha(Opacity=0);
}
您还需要设置图像和容器的尺寸:
img.fileDownload
{
height: 26px;
width: 26px;
padding: 0;
display: inline-block;
vertical-align: middle;
margin: 0 4px 0 0;
cursor: pointer;
position: absolute;
top: 0;
left: 0;
}
div.hiddenFileInputContainter
{
position: relative;
display: inline-block;
width: 27px;
height: 27px;
overflow: hidden;
vertical-align: middle;
cursor: pointer;
}
请注意,输入的尺寸是溢出的,因此无论您在何处单击容器,都会触及其中的输入。输入应尽可能大,按钮的实际尺寸设置在容器和图像上。
一旦你设法打开对话框,提交表单只会是这样做的:
$("#fileUploadField").on("change", function() {
$("#formId").submit();
});
答案 1 :(得分:3)
通过用户硬设置查看更轻量级的帖子和(IMO)更好的解决方案:
<div class="image-upload">
<label for="file-input">
<img src="placeholder.jpg"/>
</label>
<input id="file-input" type="file"/>
</div>
CSS:
.image-upload > input
{
display: none;
}
答案 2 :(得分:2)
<div class="col-lg-10">
<input type="file" id='upload' class="col-lg-2 form-control" name="img" onchange="readURL(this);" style="visibility: hidden; width: 1px; height: 1px"/>
<a href="" onclick="document.getElementById('upload').click(); return false"><img id="blah" src="https://www.digitalocean.com/assets/media/fccmodal/github-c9188b0b.svg" alt="your image" style="width: 250px; height: 250px;"/></a>
</div>
一些jquery:
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#blah')
.attr('src', e.target.result);
};
reader.readAsDataURL(input.files[0]);
}
}
答案 3 :(得分:1)
<!-- button to open popup -->
<a href="#yourpopup" data-rel="popup" data-role="button" data-position-to="window" data-transition="flip">Open Popup</a>
<div data-role="popop" id="yourpopup">
<form id="yourform">
....inputs
<button type="submit"> submit form</button>
</div>
<script>
$('#yourform').submit( function() {
$('#yourpopup').popup("close");
});
</script>
这是基本的。一般的想法会让你到那里。我假设你想要jquery,因为它在你的一个标签中。