jQuery与target的迷宫

昨天,突然接到一个很紧急的任务,一下勿忙起来。心也慌起来。结果出了一个错误,调试多次也未果,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>简单,甚至只能说是一个脚本,但它也是一种语言,对所有的代码公平视之,引起同等的重视。

谨以为志。

原文地址:https://www.cnblogs.com/phplee/p/2574493.html