JavaScript切换行为不起作用
我试图用JavaScript创建一个简单的切换按钮,而JavaScript切换行为不起作用,javascript,html,Javascript,Html,我试图用JavaScript创建一个简单的切换按钮,而其他部分不起作用。灯刚亮,然后就停止工作了。我如何解决这个问题 <!DOCTYPE html> <html> <body> <button onclick="toggleBulb()">Turn on/off</button> <img style="margin-left:43%;border:1px solid rgb(50, 50, 50);padding: 20px
其他部分
不起作用。灯刚亮,然后就停止工作了。我如何解决这个问题
<!DOCTYPE html>
<html>
<body>
<button onclick="toggleBulb()">Turn on/off</button>
<img style="margin-left:43%;border:1px solid rgb(50, 50, 50);padding:
20px;" id='light' src='../Media/lighton.gif'>
<script>
function toggleBulb() {
var doc = document.getElementById('light')
if (doc.src == '../Media/lightoff.gif') {
doc.src = '../Media/lighton.gif'
} else if (doc.src == '../Media/lighton.gif') {
doc.src = '../Media/lightoff.gif'
}
}
</script>
</body>
</html>
打开/关闭
函数toggleBulb(){
var doc=document.getElementById('light')
如果(doc.src=='../Media/lightoff.gif'){
doc.src=“../Media/lighton.gif”
}else if(doc.src=='../Media/lighton.gif'){
doc.src='../Media/lightoff.gif'
}
}
正如我在评论中提到的,src
是基于该文件所在网站的完整路径。相反,您可以做的另一件事是检查src
是否以您要查找的字符串结尾:
function toggleBulb() {
var doc = document.getElementById('light')
if (doc.src.endsWith('/Media/lightoff.gif')) {
doc.src = '../Media/lighton.gif'
} else if (doc.src.endsWith('/Media/lighton.gif')) {
doc.src = '../Media/lightoff.gif'
}
}
或者您可以检查/设置完整路径。也不能将
else if
变成一个else
,除非您计划添加更多的逻辑 这是属性和属性之间的区别。属性是HTML中可以在标记中看到的文本,但它并不总是与同名属性相同。在这种情况下,属性src
是由src
属性表示的经过计算的URL。您会注意到,在我的演示中,我有一个以/
开头的src
属性,它告诉浏览器对该资源使用与页面匹配的当前页面协议。由于此stackoverflow页面安装了SSL,因此计算属性具有协议的https://。最后,在比较属性时应该使用
打开/关闭
函数toggleBulb(){
var doc=document.getElementById('light');
if(doc.getAttribute('src')='//placehold.it/100/000/FFF?text=OFF'){
doc.src='//placehold.it/100/FF0/000?text=ON'
}else if(doc.getAttribute('src')='//placehold.it/100/FF0/000?text=ON'){
doc.src='//placehold.it/100/000/FFF?text=OFF'
}
}
正如其他人所说,您正在检查src
属性是否完全匹配,但该属性将始终返回完整的URL,并且您没有针对完整的URL进行测试,因此您永远不会获得匹配
但是,与其他答案不同,最好使用检查图像源字符串,查看它是否包含子字符串。那么,您获得的源代码值(src
属性或完整路径)就无关紧要了.indexOf()
返回子字符串的索引位置,如果找不到,则返回-1
另外,可以使用JavaScript的简化if/then
:
打开/关闭
函数toggleBulb(){
var doc=document.getElementById('light');
//如果源包含“lightoff”,则将其设置为“lighton”,否则将其设置为“lightoff”
doc.src=doc.src.indexOf('../Media/lightoff.gif')>-1?“../Media/lighton.gif”:doc.src;
}
您必须在比较图像的每个地方编写完整的代码。另外,doc.src
返回一个字符串,表示图像的URL,包括协议,如-(此处为图像的完整路径)。
如果您的代码在本地主机上运行,那么file:///now 这里是图像的完整路径。)我在代码中添加了这个,它将正确运行
<!DOCTYPE html>
<html>
<body>
<button onclick="toggleBulb()">Turn on/off</button>
<img style="margin-left:43%;border:1px solid rgb(50, 50, 50);padding: 20px;" id='light' src='**insert your full path of image here**'>
<script>
function toggleBulb() {
var doc = document.getElementById('light');
if (doc.src== "file:///insert your full path of image here")
{
doc.src='insert your full path of image here';
}
else if (doc.src == "file:///insert your full path of image here") {
doc.src='full path of image here';
}
}
</script>
</body>
</html>
打开/关闭
函数toggleBulb(){
var doc=document.getElementById('light');
如果(doc.src==”file:///insert 您的完整图像路径在此)
{
doc.src='在此处插入图像的完整路径';
}
否则如果(doc.src==”file:///insert 您的完整图像路径在此){
doc.src='此处图像的完整路径';
}
}
因为src
永远不是'../Media/lighton.gif'
的值。实际值被解释为完整路径,因此不会影响任何条件。您应该检查src是否包含“lightoff.gif”或“lighton.gif”图像。您可以使用indexOf来实现这一点。这是因为src总是返回完整路径而不是相对路径,并且,一旦您纠正了这一点,您就不需要else if()
,只需要else
。确实不需要else if()
。只要一个else
就可以了。@ScottMarcus只是作为注释添加了它。只是一个注释:旧浏览器(这是一个比我的更好的答案,我建议改为.getAttribute('src'))
将给出OP想要的确切值。谢谢,伙计!工作得很好!因为我们有一个用户否决了所有投票,因为他们认为这是一个糟糕的问题,不管答案是好是坏(+1
)。不幸的是,像这样滥用否决票的用户更常见。