javascript - 如何使用两张单独的图片上传预览?

标签 javascript jquery css font-awesome-5

所以我找到了一个很棒的代码片段,我想在我的代码中使用它,它是:https://codepen.io/siremilomir/pen/jBbQGo

我的问题是我想并排使用其中的 2 个。我重写了 ID,使用新 ID 将脚本复制了两次,但我很确定这不是我应该做的。不幸的是,我真的不擅长 JavaScript,我想问题在于该函数到处都接受相同的输入,但我不知道它是什么。

另一个问题是FontAwesome图标不显示,请问是什么问题? 我阅读了这篇文章并尝试了所有方法但仍然无效:Font Awesome & Unicode

我试过这个:

function readURL(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();
        reader.onload = function(e) {
            $('#indexImage1').css('background-image', 'url('+e.target.result +')');
            $('#indexImage1').hide();
            $('#indexImage1').fadeIn(650);
        }
        reader.readAsDataURL(input.files[0]);
    }
}
$("#indexImage1Upload").change(function() {
    readURL(this);
});

function readURL(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();
        reader.onload = function(e) {
            $('#indexImage2').css('background-image', 'url('+e.target.result +')');
            $('#indexImage2').hide();
            $('#indexImage2').fadeIn(650);
        }
        reader.readAsDataURL(input.files[0]);
    }
}
$("#indexImage2Upload").change(function() {
    readURL(this);
});
body {
    background: whitesmoke;
    font-family: 'Open Sans', sans-serif;
}

.container {
    max-width: 960px;
    margin: 30px auto;
    padding: 20px;
}


.avatar-upload {
    position: relative;
    max-width: 205px;
    margin: 50px auto;
}

.avatar-upload .avatar-edit {
    position: absolute;
    right: 12px;
    z-index: 1;
    top: 10px;
}

.avatar-upload .avatar-edit input {
    display: none;
}

.avatar-upload .avatar-edit input+label {
    display: inline-block;
    width: 34px;
    height: 34px;
    margin-bottom: 0;
    border-radius: 100%;
    background: #FFFFFF;
    border: 1px solid transparent;
    box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.12);
    cursor: pointer;
    font-weight: normal;
    transition: all .2s ease-in-out;
}

.avatar-upload .avatar-edit input+label:hover {
    background: #f1f1f1;
    border-color: #d6d6d6;
}

.avatar-upload .avatar-preview {
    width: 192px;
    height: 192px;
    position: relative;
    border-radius: 100%;
    border: 6px solid #F8F8F8;
    box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.1);
}

.avatar-upload .avatar-edit input+label::after {
    content: "\f040";
    font-family: 'FontAwesome';
    color: #757575;
    position: absolute;
    top: 10px;
    left: 0;
    right: 0;
    text-align: center;
    margin: auto;
}

.avatar-upload .avatar-preview>div {
    width: 100%;
    height: 100%;
    border-radius: 100%;
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
    <div class="avatar-upload">
        <div class="avatar-edit">
            <input type='file' id="indexImage1Upload" accept=".png, .jpg, .jpeg" />
            <label for="indexImage1Upload"></label>
        </div>
        <div class="avatar-preview">
            <div id="indexImage1" style="background-image: url(http://i.pravatar.cc/500?img=7);">
            </div>
        </div>
    </div>
    
    <div class="avatar-upload">
        <div class="avatar-edit">
            <input type='file' id="indexImage2Upload" accept=".png, .jpg, .jpeg" />
            <label for="indexImage2Upload"></label>
        </div>
        <div class="avatar-preview">
            <div id="indexImage2" style="background-image: url(http://i.pravatar.cc/500?img=7);">
            </div>
        </div>
    </div>
</div>

最佳答案

您正在使用两个同名的函数。它无法区分它们。

您可以重命名这些函数,或者更好,因为它们在做同样的事情,您可以使用参数并以这种方式调用它们。

function readURL(inputElement, imageElement) {
    if (inputElement.files && inputElement.files[0]) {
        var reader = new FileReader();

        reader.onload = function(e) {
            imageElement.css('background-image', 'url('+e.target.result +')');
            imageElement.hide();
            imageElement.fadeIn(650);
        }

        reader.readAsDataURL(inputElement.files[0]);
    }
}

然后当您设置监听器时。

$("#indexImage1Upload").on('change', function () {
    readURL(this, $('#indexImage1'));
});

$("#indexImage2Upload").on('change', function () {
    readURL(this, $('#indexImage2'));
});

你可以看到它在这里工作:https://jsfiddle.net/gv1Ls987/

关于javascript - 如何使用两张单独的图片上传预览?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59457815/

相关文章:

javascript - 当留下特定像素时,将位置从固定更改为绝对

javascript - jQuery 可扩展表格行

jQuery AJAX 函数返回 true 或 false 仅返回 false,而一切都很好

javascript - 在 nvd3 结构中使用 d3 和 json 的多折线图

html - 如何创建带有图像的按钮?

javascript - 如何使滚动条居中?

循环反转数组的Javascript

javascript - 在 AngularJS 部分中动态包含指令

jquery - Joomla 3 + Bootstrap 3 - 单击时折叠的导航栏跳跃

jquery - 使用 jQuery 更改标记和不同 CSS 文件的 CSS 属性