如何在不隐藏所有样式的情况下隐藏图像损坏的图标?

Posted

技术标签:

【中文标题】如何在不隐藏所有样式的情况下隐藏图像损坏的图标?【英文标题】:How to hide image broken icon without hiding all the style? 【发布时间】:2018-01-17 05:23:14 【问题描述】:

我会解释代码,让我们看看是否有人可以帮助我。

我有这个代码:

<table>
      <tr>
          <td>
              <img src="" id="img" class="img" style="width:100%;height:200px;background-color:#ccc;border:2px solid gray;">
              <input type="file" name="pathheader" id="pathheader"  class="form-control-file" aria-describedby="fileHelp" style="display:none;">
          </td>
          <td>
              <img src="" id="img2" class="img2" style="width:100%;height:200px;background-color:#ccc;border:2px solid gray;">
              <input type="file" name="pathhome" id="pathhome" class="form-control-file" aria-describedby="fileHelp" style="display:none;"><br>
          </td>
      </tr>
      <tr>
          <td>
              <input type="button" name="" value="Seleccionar header" id="browse_file" class="btn btn-danger form-control">
          </td>
          <td>
              <input type="button" name="" value="Seleccionar home" id="browse_file2" class="btn btn-danger form-control">
          </td>
      </tr>
</table>

还有这个 JS 代码:

$("#browse_file").on('click',function(e)
        $("#pathheader").click();
    )
    $("#browse_file2").on('click',function(e)
        $("#pathhome").click();
    )
    $("#pathheader").on('change',function(e)
        var fileInput=this;
        if (fileInput.files[0])
            
                var reader=new FileReader();
                reader.onload=function(e)
                
                    $("#img").attr('src',e.target.result);
                
                reader.readAsDataURL(fileInput.files[0]);
            
    )
    $("#pathhome").on('change',function(e)
        var fileInput=this;
        if (fileInput.files[0])
            
                var reader=new FileReader();
                reader.onload=function(e)
                
                    $("#img2").attr('src',e.target.result);
                
                reader.readAsDataURL(fileInput.files[0]);
            
    )

我阅读了其他问题并且可以提出:

onerror="this.style.display='none'"

但我不想隐藏所有的样式,我想要有背景、边框等。只删除图标img。

知道如何使用 Ajax 来实现吗?如果没有,可以用 CSS 吗?

非常感谢,任何帮助将不胜感激。

【问题讨论】:

只删除图标img??我不明白,你要删除什么? 我想在 img 还没有加载的时候移除图片损坏的图标 也许使用透明占位符img? JS,对不起@ADyson jQuery or javascript check if image loaded的可能重复 【参考方案1】:

问题是您将 class 和 img 标签一起分配。因此,如果您在图像标签内分配类,然后在该类中引用背景图像,它将仅显示损坏的图像,因为它已经开始引用两个图像标签,因此解决方案是您使用 div 而不是 img 标签并看到魔法。损坏的图像图标根本不会出现,背景图像将按预期显示

【讨论】:

【参考方案2】:

您可以尝试在出错时注入透明的base64-image。

onerror="this.src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='"

在 OP 提出问题后编辑:

Base64 是一种图像格式,允许您将图像直接“写入”到 html 文件中,而不是包含外部图像。

我们看一下图片src:

第一:

&lt;img src="data:image/png;base64...

这将告诉浏览器如何显示后面的代码。它说src的MIME-Type(在本例中为文件类型)是.png,编码是base64,基本上只是一个字符串中的图像数据。

之后,实际数据如下:

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=

这些只是表示像素、颜色、alpha 等图像数据的字母。 如果您想知道它是如何工作的,请阅读https://www.rfc-editor.org/rfc/rfc3548 或点击进一步阅读下的链接。

进一步阅读

Embedding Base64 Images(在 *** 上)

How to display Base64 images in HTML(在 *** 上)

Base64 image converter

Base64 on Wikipedia

【讨论】:

它可以工作@TomM,但不了解该行的任何内容,只是this.src,可以解释一下吗?我也会读你的href。谢谢 哦,好吧,我已经更新了答案。无论如何,不​​客气

以上是关于如何在不隐藏所有样式的情况下隐藏图像损坏的图标?的主要内容,如果未能解决你的问题,请参考以下文章

html img 隐藏损坏的图标,显示 alt

如何在不使用或隐藏的情况下上传图片?

QQ的一些图标是隐藏了按钮的边框 但是鼠标放在上面又出现了 想问一下如何用WPF实现的

如何在不单击后退按钮的情况下隐藏键盘[重复]

如何在不隐藏正文滚动条的情况下在固定 div 上滚动时禁用正文滚动?

tomcat绑定域名,在不修改端口号为80的情况下,如何隐藏端口