【问题标题】:Image preview in child page using JQuery not working?使用 JQuery 的子页面中的图像预览不起作用?
【发布时间】:2016-02-16 13:23:08
【问题描述】:

当用户在使用 JQuery 注册时浏览图像时,我想在 div 中预览图像。

下面是子页面名称 SignUp.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="phForChildPage" runat="server">
<asp:Table runat="server" HorizontalAlign="Center" BorderColor="Yellow" BorderStyle="Dotted" BorderWidth="2">
<asp:TableRow runat="server">
                <asp:TableCell runat="server">
                    <asp:FileUpload runat="server" ID="fuUserPicture" CssClass="ui-corner-all" />
                </asp:TableCell>
                <asp:TableCell runat="server">
                        <div id="imageHolder"></div>
                </asp:TableCell>
            </asp:TableRow>
</asp:Table>
</asp:Content>

JavaScript 文件中的 JQuery 代码。

// for image preview
$(function () {
    $("#phForChildPage_fuUserPicture").on('change', function () {
        if (typeof (FileReader) != "undefined") {
            var imageHolder = $("#phForChildPage_imageHolder");
            imageHolder.empty();
            //make new instance of file reader
            var reader = new FileReader();
            reader.onload = function (e) {
                $("<img />", {
                    "src": e.target.result,
                    "class": "thumb-image",
                    "width": "200px",
                    "height": "200px"
                }).appendTo(imageHolder);
            }
            imageHolder.show();
            reader.readAsDataURL($(this)[0].files[0]);
        }
        else {
            alert("This browser does not support File Reader");
        }
    })
});

我检查了我的 JQuery 工作。一切都好。只是图像不显示在 div 中。请帮忙。

【问题讨论】:

  • 你检查过控制台中的 e.target.result 了吗?
  • 是的,我在控制台上查看。没有错误。
  • 我知道没有错误,但是您是否获得了图像源,因为您已在 src 键中分配了 e.target.result。
  • 调试器是否进入函数$("#phForChildPage_fuUserPicture").on('change'?您确定服务器将 if fuUserPicture 呈现为 phForChildPage_fuUserPicture 吗?你能告诉我们这个asp.net代码的输出html吗?
  • Banik,我不知道如何检查 e.target.result 中的内容,因为 VS 不调试 JavaScript 代码。我在警报中看到它显示如下数据:image/jpeg .... 和其他。我粘贴在那里,但它太长了。我只想在将数据保存到服务器之前预览图像。请帮忙

标签: javascript jquery html css filereader


【解决方案1】:

在您的原始代码中发现了错误。您正在使用 $('#phForChildPage_imageHolder') 访问 div,但事实是 div id 没有更改,它仍然只是“imageHolder”。

是的,我已经通过在我当地的视觉工作室复制和粘贴你的代码来确认它并尝试了这个问题。 问题在我的本地环境中也可以重现。

解决方案非常简单,正如我上面提到的,您只需使用“imageHolder”而不是“phForChildPage_imageHolder”。

更新您的 javascript 代码

$(function () {
$("#phForChildPage_fuUserPicture").on('change', function () {
    if (typeof (FileReader) != "undefined") {
        var imageHolder = $("#phForChildPage_imageHolder");
        imageHolder.empty();
        //make new instance of file reader
        var reader = new FileReader();
        reader.onload = function (e) {
            $("<img />", {
                "src": e.target.result,
                "class": "thumb-image",
                "width": "200px",
                "height": "200px"
            }).appendTo(imageHolder);
        }
        imageHolder.show();
        reader.readAsDataURL($(this)[0].files[0]);
    }
    else {
        alert("This browser does not support File Reader");
    }
})
});

$(function () {
$("#phForChildPage_fuUserPicture").on('change', function () {
    if (typeof (FileReader) != "undefined") {
        var imageHolder = $("#imageHolder");
        imageHolder.empty();
        //make new instance of file reader
        var reader = new FileReader();
        reader.onload = function (e) {
            $("<img />", {
                "src": e.target.result,
                "class": "thumb-image",
                "width": "200px",
                "height": "200px"
            }).appendTo(imageHolder);
        }
        imageHolder.show();
        reader.readAsDataURL($(this)[0].files[0]);
    }
    else {
        alert("This browser does not support File Reader");
    }
})
});

希望这会有所帮助。

【讨论】:

  • 感谢 Nitin,但能否请您告诉我 div id 未更改的原因。以及为什么 FileUpload 控制 ID 被更改。当我使用简单的imageHolder 和使用phForChildPage_imageHolder 时,我是被拘留者并且非常困惑
  • Div 不是 ASP.Net 元素,您还没有添加 runat="server"。如果您不添加 runat="server" 它只是一个 HTML 元素,并且如果它们在子页面中,则 HTML 元素 id 不会被更改。
【解决方案2】:

我从单独的文件中删除我的 JavaScript 代码,并将代码放在子页面的 head 下,并从 asp:FileUpload 控件调用 onchange(this) 函数。

<asp:TableRow runat="server">
                <asp:TableCell runat="server">
                    <asp:FileUpload runat="server" ID="fuUserPicture" onchange="ShowImagePreview(this)" CssClass="ui-corner-all" />
                </asp:TableCell>
                <asp:TableCell runat="server">
                        <asp:Image runat="server" ID="imageHolder" Height="150px" Width="240px" />
                </asp:TableCell>
            </asp:TableRow> 

我没有使用&lt;div id=imageHolder&gt;&lt;/div&gt;,而是使用asp:Image 控件。

最后是 JavaScript 代码

<script type="text/javascript">
        function ShowImagePreview(input) {
            if (input.files && input.files[0]) {
                var reader = new FileReader();
                reader.onload = function (e) {
                    $('#<%=imageHolder.ClientID%>').prop('src', e.target.result)
                .width(240)
                .height(150);
                };
                reader.readAsDataURL(input.files[0]);
            }
        }
    </script>

而且效果很好。但是直到现在我还不知道为什么当我将此代码放在单独的javascript文件中并使用#contentPlaceHolderId_controlId而不是#controlId时它不起作用,也不明白为什么我们使用ClientId。但它有效,我很高兴。如果有人知道上述问题的概念性答案,请发表评论。谢谢

【讨论】:

  • 我在您的原文中发现了错误并更新了我的答案。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 2017-10-31
  • 2013-12-24
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多