我刚做了个验证码的img标签。
代码如下
<img name="imgcode" id="imgcode" src="SecurityCode.aspx" alt="点击刷新验证码" />
<a href="#" onclick="reloadcodepage()">点击刷新验证码</a>js代码如下
function reloadcodepage() {
var obj = document.getElementById("imgcode");
obj.src = "SecurityCode.aspx";
}这个页面SecurityCode.aspx实际上我是一个生成图片的页面,每次都会生成不同的图片。
所以我点击一次刷新,就改变一次img的src属性,但是,我这样操作之后发觉是无效的。
然后我将js最后一句代码改为:
obj.src = "SecurityCode.aspx?name=1";
再次执行代码后,第一次点击刷新我发觉验证码正确了,但是第二次点击时候又没有变化了。
由此:我大胆的推断,给DOM属性赋值时如果元素的属性值已经要赋的值相同 (原来值=即将赋的值) 那么DOM元素的属性值并不是重新赋予的,而是保留了原来的。不知道这个细小的问题大家发觉没有?并且能不能解决。当然我有很多种办法来达到我想要的效果,但是能直接正常化的解决是最好的。按理论我的代码就应该每次重新加载src属性,由于SecurityCode.aspx是一张动态验证码图片,所以我觉得我代码完全是没问题的。我并不想通过不同的参数来达到我的目地,所以在此一问了。
代码如下
<img name="imgcode" id="imgcode" src="SecurityCode.aspx" alt="点击刷新验证码" />
<a href="#" onclick="reloadcodepage()">点击刷新验证码</a>js代码如下
function reloadcodepage() {
var obj = document.getElementById("imgcode");
obj.src = "SecurityCode.aspx";
}这个页面SecurityCode.aspx实际上我是一个生成图片的页面,每次都会生成不同的图片。
所以我点击一次刷新,就改变一次img的src属性,但是,我这样操作之后发觉是无效的。
然后我将js最后一句代码改为:
obj.src = "SecurityCode.aspx?name=1";
再次执行代码后,第一次点击刷新我发觉验证码正确了,但是第二次点击时候又没有变化了。
由此:我大胆的推断,给DOM属性赋值时如果元素的属性值已经要赋的值相同 (原来值=即将赋的值) 那么DOM元素的属性值并不是重新赋予的,而是保留了原来的。不知道这个细小的问题大家发觉没有?并且能不能解决。当然我有很多种办法来达到我想要的效果,但是能直接正常化的解决是最好的。按理论我的代码就应该每次重新加载src属性,由于SecurityCode.aspx是一张动态验证码图片,所以我觉得我代码完全是没问题的。我并不想通过不同的参数来达到我的目地,所以在此一问了。
传一个date参数进去,每次new的时候date显然都不一样的,这样系统认为是另一个请求,否则就是你看到的那样。
你现在的提交方式 是 get 提交 所以 改变 传给后台的数据 只能是 通过 url 来传递参数..这个也是 内部的一个机制.. 好像是 (程序的运行环境)如果路径一样 那么直接给你返回 上次这个路径所返回的结果.. 不会在执行一遍代码.. 我的理解是这样的 .. 哪里不对 希望指出来
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
var img = new Image();
var c = 0;
img.onload = function(){
z();
console.log("S:"+c);
}
img.onerror = function(){
z();
console.log("E:"+c);
}
img.src = "http://www.baidu.com/img/baidu_sylogo1.gif";
var z =function(){
c++;
//console.log("Get:"+c);
if(c == 1){
//img.src = "about:blank";
img.src = "http://www.baidu.com/img/baidu_sylogo1.gif?a=2";
}
if(c == 2 ){
img.src = "http://www.baidu.com/img/baidu_sylogo1.gif";
}
}
</script>
</head>
<body>
</body>
</html>
Chrome14 , FF7 下的结果
1:赋的值与原来的值相同,不会触发onload及http请求
2:赋值不同会触发onload及http请求 (屁话)
3:第一次赋值a,第二次赋值b,第三次再赋值a的话,3次均会触发onload,但第三次不会触发http请求奇怪的是IE9在IE9下,测试第三种情况,第一次访问的时候会发出两个http请求,分别为xxx.gif和xxx.gif?a=2
然后刷新(包括强制刷新)就只会发出一个http请求xxx.gif
ps.图片好像一般是ashx生成