【问题标题】:change image src in internet explorer via javascript通过 javascript 在 Internet Explorer 中更改图像 src
【发布时间】:2017-10-28 01:00:21
【问题描述】:

跟进我之前的帖子:enter link description here

我想将其发布在它自己的主题中,以便其他人可以更轻松地找到它,如果它是重复的,我深表歉意。在我之前的帖子中,一位名叫 Ryan 的人为我的问题提供了一个解决方案,当时没有解决,虽然我很累,但已经很晚了,也许我错过了一些东西。无论如何,他建议我在按下每个按钮时更改图像 src,而不是最初加载所有图像,这无疑是一个更优雅的解决方案。他提供了这个代码;

<ul class='imageMenu'>
  <li data-image="dog.jpg">dog</li>
  <li data-image="cat.jpg">cat</li>
  <li data-image="donkey.jpg">donkey</li>
</ul>
<img src="" id='selectedImage' />
<script>
  const img = document.querySelector('#selectedImage');
  document.querySelectorAll('.imageMenu li').forEach(item => {
    item.addEventListener('click', evt => {
      img.setAttribute('src', evt.target.getAttribute('data-image'));
    });
  });
</script>

现在,随着时间的推移和睡眠的恢复,我可以在 Internet Explorer 中正常工作。我的问题是,是否有一些代码可以为 Internet Explorer 添加,比如 if 语句说“如果在 Internet Explorer 中运行此代码。”?再次抱歉,如果我是多余的,我只是迷路了,并且为了记录,Internet Explorer 是我存在的祸根,这是我不得不重新编码页面开始的全部原因。无论如何,任何建议转向哪里将不胜感激。谢谢,Black_Lightning

【问题讨论】:

  • 你说的是哪个版本的IE?你在 IE 中遇到了什么错误?
  • 我使用 IE 8 (8.0.7601.17514)。我从未在控制台中看到任何错误。
  • 好吧,给你。 IE 8 不再被广泛使用,但可悲的是不符合标准。只是好奇,你为什么还在IE8上?请参阅下面的更新答案。
  • 每次我更新 Windows 时,我的电脑都坏了,所以我发誓不再更新,我发誓微软比我遇到的任何病毒都更致命,至少在我清除驱动器然后做的那些病毒中Acronis 恢复,一切都很好。更不用说,如果我在 IE8 上,其他人可能也是如此,所以它给了我一个很好的基线,如果它在我的机器上运行,它也可以在其他人的机器上运行,我想尽可能地接触最广泛的受众。我只是不知道为什么我在以前的线程中发布的草率 JavaScript 有效,而不是更优雅的解决方案。如果我可以加载我的头像,我也很乐意使用我的。
  • MarketShare.com 称,只有不到 1% 的网络用户使用 IE 8。这是微软对任何网络标准做出任何承诺之前的最后一个 IE 版本。因此,在考虑开发兼容性时,它几乎没有被普遍考虑。事实上,大多数网站只考虑与 IE 10 或更高版本兼容。有些专有的“内部”应用程序可能仍需要它,但对于公众,我们不再编写与其兼容的代码。

标签: javascript image internet-explorer gallery src


【解决方案1】:

我发现了一些简单有效的方法!只需几行易于理解的代码!再次感谢所有在这里和我之前的帖子中提供帮助的人。

<script type="text/javascript">
  function change_pic(p) {
  document.images._pimg.src = p;
  // alert('test');
}
</script>

<img name="_pimg" src="image.jpg" >

<a href="javascript:;" onclick="change_pic('image.jpg')">image</a>
<a href="javascript:;" onclick="change_pic('image2.jpg')">image 2</a>

【讨论】:

  • name 属性在非表单元素上无效。它应该是id,如果你改变它,那么该行可以是:_pimg.src = p;
  • 虽然这段代码很简单并且“工作”。它是非标准的,不遵循现代编码标准和最佳实践。
【解决方案2】:

首先const 和箭头函数是 IE 8 不支持的 ECMAScript 6 功能,因此您应该使用 var 而不是箭头函数。

接下来,IE 8 也不支持.forEach().querySelectorAll()

但是,最重要的是 IE 8 不支持 .addEventListener() 作为将回调函数绑定到事件的一种方式,它使用专有的 attachEvent()

现在,我们不想检查 IE 本身,我们只需要知道我们想要使用的功能是否可用,称为 "feature detection"

您绝对应该知道 http://caniuse.com 是一个很好的资源,可以检查哪些地方支持哪些内容。

请参阅下面的跨浏览器版本:

// IE 8 doesn't support .forEach, .querySelectorAll or .addEventListener

var img = document.getElementById('selectedImage');
var menu = document.getElementById('imageMenu');

for(var i = 0; i < menu.childNodes.length; i++){
  
  // We're looping through all the child nodes, but we only care about <li> elements:
  if(menu.childNodes[i].nodeName === "LI"){

    // Check to see if addEventListener is supported
    if(window.addEventListener){
      // Modern, standards-compliant browser
      menu.childNodes[i].addEventListener('click', function(evt) {
        img.setAttribute('src', evt.target.getAttribute("data-image"));
        // Test
        console.log(img.src);
      });
    } else {
      // IE 8 or less
      menu.childNodes[i].attachEvent("onclick", function(evt){
        evt = evt || window.event;
        img.setAttribute('src', evt.srcElement.getAttribute("data-image"));
        // Test
        console.log(img.src);        
      });
    }
  }
}
<ul id='imageMenu'>
  <li data-image="dog.jpg">dog</li>
  <li data-image="cat.jpg">cat</li>
  <li data-image="donkey.jpg">donkey</li>
</ul>
<img src="" id='selectedImage' />

这是在 IE 8 仿真模式下在 IE 11 上运行的代码,您可以看到它产生了正确的结果。

【讨论】:

  • 谢谢。就像 Ryan 的代码一样,它似乎可以在除 IE 之外的所有地方工作,它给出的错误是指向这一行的语法错误; liArray.forEach(item => { 那是我希望/祈祷它会起作用。我会继续尝试让它起作用,所以如果我不立即回复这就是原因。
  • 我运行了你的新 sn-p,它给出了字符 16 的错误“需要对象”(我的计算将它带到分号后的 i:for(var i = 0; i &lt; menu.childNodes.length; i++){ 我真的很讨厌现在!咕噜!
  • 我测试了在 IE 8 仿真模式下运行的 IE 中的代码,它可以正常工作(见上图)。如果它不适合您,您一定不能在 body 标记关闭之前放置脚本代码,或者在设置代码时犯了其他错误。
猜你喜欢
  • 2010-12-14
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 2016-07-13
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
相关资源
最近更新 更多