基本Javascript问题
我在胡闹头一本Javascript书。所以我的问题是为什么我的函数基本Javascript问题,javascript,if-statement,Javascript,If Statement,我在胡闹头一本Javascript书。所以我的问题是为什么我的函数turnSad()中的if子句不触发更新我已经在Chrome和FF4中尝试过了。另外,如果我要注释掉if语句,该函数将工作 <script type="text/javascript"> function turnSad() { if (document.getElementById("rockImg").src == "rock_happy.png") documen
turnSad()
中的if
子句不触发更新我已经在Chrome和FF4中尝试过了。另外,如果我要注释掉if
语句,该函数将工作
<script type="text/javascript">
function turnSad() {
if (document.getElementById("rockImg").src == "rock_happy.png")
document.getElementById("rockImg").src = "rock.png";
}
function touchRock() {
var userName = prompt("What is your name?", "Enter your name here");
if (userName) {
alert("It is nice to meet you " + userName + ".");
document.getElementById("rockImg").src = "rock_happy.png";
}
setTimeout("turnSad();", 1000);
}
</script>
<img id="rockImg" src="rock.png" alt="iRock" style="cursor:pointer"
onclick="touchRock();" />
函数turnSad(){
if(document.getElementById(“rockImg”).src==“rock\u happy.png”)
document.getElementById(“rockImg”).src=“rock.png”;
}
函数touchRock(){
var userName=prompt(“你叫什么名字?”,“在这里输入你的名字”);
如果(用户名){
提醒(“很高兴见到你”+用户名+”;
document.getElementById(“rockImg”).src=“rock_happy.png”;
}
setTimeout(“turnSad();”,1000);
}
您正在使用哪个浏览器?IE可能会将文件名转换为大写(“ROCK_HAPPY.PNG”)。使用开发者工具(按工具工具栏中的刷新按钮)确定真正的“src”属性是什么,或者只需执行警报(document.getElementById().src)
当访问src
属性(而非属性)时,浏览器可以自动解析相对路径并返回包含协议的绝对路径,域、端口等
要获取或更改属性值,请使用getAttribute
和setAttribute
image.getAttribute("src");
image.setAttribute("src", "someImage.png");
看看这个。@Anurag的答案很好,这是你所能做的最好的了,
getAttribute()
受到周围每个浏览器的支持(IE 5.5-7中有缺陷,但对于获取src
来说,它工作得很好)
我只想补充几点:
- 不要使用
的字符串语法,始终传入函数(可以传入闭包以运行多个函数),这被认为是最佳做法。字符串变体的工作原理类似于众所周知的邪恶混蛋setTimeout()
。因此,您的代码应该如下所示(同样适用于eval()
):setInterval
- 除了使用最好的方法
,还可以编写正则表达式方法。我只是为了好玩和开阔视野才添加这个,请使用@Anurag的解决方案getAttribute()
这将尝试以不区分大小写的方式进行匹配,在字符串末尾查找if (document.getElementById("rockImg").src.match(/(^|\/)rock_happy\.png$/i)) { document.getElementById("rockImg").src = "rock.png"; }
,在其前面有字符串的开头或rock_happy.png
/
rock_happy.png
这是可行的,但我不完全理解您的陈述当访问src属性(而不是属性)时,浏览器可能会自动解析相对路径并返回绝对路径,包括协议、域、端口、,等等。
你的意思是在属性src
后面有它的内置属性吗?@Nai如果src
属性被设置为rock_happy.png
(这是一个相对URL),并且你使用elem.src
获得值,一些浏览器会自动将其填充为绝对URL(例如http://yourdomain.com/rock_happy.png
)。上存在表示属性的src
属性,另一方面表示HTML文档中存在的src
属性的原始值。获取或设置属性值时,不会对该值应用任何逻辑,也不会以任何方式对其进行转换。
if (document.getElementById("rockImg").src.match(/(^|\/)rock_happy\.png$/i)) {
document.getElementById("rockImg").src = "rock.png";
}