【问题标题】:unable to change image source in DOM javascript无法在 DOM javascript 中更改图像源
【发布时间】:2020-10-23 07:42:37
【问题描述】:

我是 Rahul,我是编码新手。我有一个与 DOM 事件相关的查询。请看下面的代码sn -p -

let door1 = document.getElementById('one');
door1.src = "closed_door.svg";
const isClicked = (door) => {
    if(door.src === "closed_door.svg") {
        return true;
    }
    else {
        return false;
    }
};
door1.onclick = () => {
    if(isClicked(door1)) {
    door1.src = "beach.svg";}
};

简单地说,one 是元素的 id。如果没有 isClicked,我可以在单击时成功地将 src 从关闭的门更改为海滩。但是当我引入 isClick 时,它并没有改变。有人可以告诉我我错过了什么。我会很感激的

注意 - 我正在构建与此类似的游戏 - https://s3.amazonaws.com/codecademy-content/projects/chore-door/chore-door-final/index.html 他们使用与我相同的过程。所以请提出一个解决方案,告诉我我在这里犯的错误,而不是问题的替代方案

问候 拉胡尔

【问题讨论】:

  • console.log(door.src) 在 isClicked 方法中,看看它说的是什么
  • 修改html中直接出现的属性时最好使用setAttributegetAttribute。将door1.src = 'closed_door.svg'; 更改为door1.setAttribute('src', 'closed_door.svg');。将if (door.src === 'closed_door.svg') 更改为if (door.getAttribute('src') === 'closed_door.svg')
  • 我的假设是逻辑需要改成door.src.endsWith('closed_door.svg')
  • 门Element上的src是元素的属性,不是属性。该属性很可能具有完整的文件路径。属性可能是“me.svg”,但属性可能是“yoursite.com/me.svg”。这就是为什么我说要记录价值并自己查看

标签: javascript


【解决方案1】:

据报道here

src 反射属性将是解析后的 URL — 即变成的绝对 URL。因此,如果在页面 http://www.example.com 上,document.getElementById("foo").src 会给你“http://www.example.com/images/example.png”。

所以要获得真正的src 属性,您应该像这样使用.getAttribute('src')

const isClicked = (door) => {
    if(door.getAttribute('src') === "closed_door.svg") {
        return true;
    }
    else {
        return false;
    }
};

Ans 也顺便说一句,您可以将其快捷方式:

const isClicked = (door) => door.getAttribute('src') === "closed_door.svg";

【讨论】:

  • 谢谢贝托。只是一个查询 - s3.amazonaws.com/codecademy-content/projects/chore-door/… 他们使用与我类似的逻辑。你能告诉我为什么我不能用我在 sn-p 中给出的逻辑得到类似结果的错误吗?
  • @Rahul 因为他们有let closedDoorPath = "https://s3.amazonaws.com/codecademy-content/projects/chore-door/images/closed_door.svg" 而不是let closedDoorPath = "closed_door.svg"
  • 非常感谢@Berto99。这是我关于 Stack Overflow 的第一个问题,您为我带来了非常愉快的体验!对于像我这样目前处于零水平的学习者来说意义重大!未来也请成为救世主! :D
  • @Rahul ahah 当然没问题,我们都过去了,祝你好运
【解决方案2】:

用这个替换你的代码..

let door1 = document.getElementById('one');
door1.src = "https://s3.amazonaws.com/codecademy-content/projects/chore-door/images/closed_door.svg";
const isClicked = (door1) => {
    if(door1.src === "https://s3.amazonaws.com/codecademy-content/projects/chore-door/images/closed_door.svg") {
        return true;
    }
    else {
        return false;
    }
};

door1.onclick = () => {
    if(isClicked(door1)) {
    door1.src = "https://s3.amazonaws.com/codecademy-content/projects/chore-door/images/beach.svg";}
};

【讨论】:

  • 解决方案不正确。请通过berto99查看答案
  • 好的 .. .. @Rahul
猜你喜欢
  • 2013-08-21
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2015-10-14
  • 2010-12-06
  • 2013-12-21
相关资源
最近更新 更多