昨天,突然接到一个很紧急的任务,一下勿忙起来。心也慌起来。结果出了一个错误,调试多次也未果,google也未果,最后请leader帮忙看一下,顿感有悟。
具体问题如下:
页面有若干<a>标签,禁止超链接跳转,使用javascript(jQuery)来控制跳转。我的原代码是这样写的。
// jQuery <script type="text/javascript"> $(document).ready(function(){ var left="xszn"; var top="yhxy"; var contents=left+"_"+top+".lib"; $("#pers_content").load("/utility/"+contents); $(".uls").find("li a").bind("click", function(){ var url="/personal.php?left="+$(this).attr('target'); window.location.href=url; }); $("#topMenus").find("a").bind("click", function(){ var url="/personal.php?left="+$("#left_root").attr("goal")+"&top="+$(this).attr("target"); window.location.href=url; }); }) </script>
页面上的标链接如下:
<a href="###" target="gwlc">购物流程</a>
粗看下是好似没有问题,但是测试时,点击链接却总是打开两个窗口。
仔细分析下,问题来了,关键在target上,因为<a>标签中,target本就是一个属性。
查下w3c,关于<a>标签的target属性有如下阐述:
「如果在一个 <a> 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的、名称与这个目标吻合的框架或者窗口中的文档。如果这个指定名称或 id 的框架或者窗口不存在,浏览器将打开一个新的窗口,给这个窗口一个指定的标记,然后将新的文档载入那个窗口。从此以后,超链接文档就可以指向这个新的窗口。 」
因此,上面的代码,在使用js控制window.open(或是window.location.href)来打开目标链接时,<a>本身的target发挥了作用,打开了一个新窗口。症结已找到,对症开方,修改代码中targe为其他名称。
反思:
这样的错误,原因,有如下几点:
编程需要细心与耐心,比之钓鱼的功夫还要深沉,这是一种态度,一种境界。
基本功要扎实,就像这样的问题,其实与java,c/c++里的变量名不可以使用关键字一样的道理。
代码是实在的,不会骗人,所以也不要欺骗代码,不要有偏心,虽然<html>简单,甚至只能说是一个脚本,但它也是一种语言,对所有的代码公平视之,引起同等的重视。
谨以为志。