关于a标签中传递this问题?

悬赏:5 发布时间:2008-07-23 提问人:love2java (初级程序员)

我有这样的语句:

<a href="#" onclick="deleteRow('${id}',this);"> 删除</a>

当点击链接时执行方法deleteRow, 但传递过去的this不是当前的<a>,而是一个不清楚的其它东西。我使用Dom Inspector调试时,如果动态去掉href="#",就可以获取真正的<a>。但写成这样:

<a onclick="deleteRow('${id}',this);"> 删除</a>

也不能成功。请大侠出手相助!!
问题补充:
to Ham:
老大,这样做直接提示我说页面找不到!
    <a href="javascript:delete('${id}',this)">删除</a> 
问题补充:
Ham老大,

function deleteRow(obj)
{
debugger;
}
如果我只传递this一个变量过去的话,OK,我能正确获取到<a>,obj.tagName="A":
<a href="#" onclick="deleteRow(this);"> 删除</a>

但如果多一个表达式,像这样:
<a href="#" onclick="deleteRow('${id}',this);"> 删除</a>

在接收方法中:
function deleteRow(id, obj)
{
debugger;
}
id是一个计算出来的值,比如是123;但此时obj.tagName=undefined;

不知道是不是表达式的原因,因为如果我直接传值的话,也是obj.tagName="A",也就是能正确获取到<a>.
<a href="#" onclick="deleteRow('1234',this);"> 删除</a>

问题补充:
怪就怪我不会发图哈, 我是用VS2005来调试的嘛,所有的属性方法都显示在那里的嘛。也不是所谓的RP问题,我们小组都遇到这个问题没解决所以我冒个泡。。。

麻烦各位移步一下,图在这里:
http://love2java.javaeye.com/admin/blogs/219091

因为我们的页面纯HTML,但对所编写的表达式是在接收到后台传来的数据后,在专门的表达式处理函数遍历所有的标签再赋值的。我一直找不准问题究竟在哪里的因为是,我用IE Inspector去掉href后再点链接就能正确传送this。

麻烦移步看看,给点建议吧。

采纳的答案

2008-07-24 ham (架构师)

不要叫我老大..听着怪别扭的.

根据你说的这个问题.我写了个简单的代码测试了一下:
<%@ page pageEncoding="GBK"%>
<html>
	<script>
		function deleteRow(id,obj){
			alert("tagName="+obj.tagName+"\nid="+id);
		}
	</script>
	<%request.setAttribute("id","theValue");%>
	<body>
		<a href="#" onclick="deleteRow('${id}',this);">删除</a>
	</body>
</html>

输出的值一直都是
引用
tagName=A
id=theValue


莫非...莫非出现了传说中的"RP问题"??

会不会是${id}中.含有类似" ','"这样的东西,把"'${id}'"的值实际上分解成为了两个变量.
楼主测试一下.传过来来的this到底是个什么东西.输出它的一些信息,如:
typeof(obj);
obj.constructor;
用for(var p in obj)对obj中的属性进行遍历.
查看当前方法的.arguments.length属性是多少.是否为2

提问者对于答案的评价:
楼主RP是没有问题的,大家要承认平台的差异。我这个问题还没有解决,我在onclick中直接debugger;这时它提示我this已经是其它东西了而不是<a>

其他回答

关于楼主所提的问题,我试了一下.
当使用alert传递过来的this值时,得到的是a元素链接的绝对路径,看起来是一个字符串的值.但使用typeof()来看传过来的值类型,却得到传过来的this是一个object类型的结论,

所以我猜测,应该是a元素重写了基类的toString()方法.所以在这里,返回的不是[object],而是当前a元素的链接的绝对路径.

但this的值确实就是这个a元素.这点可以对this传过来的值进行操作得出,如:改变它的innerHTML属性..改变它的css属性.都会影响到页面上的a元素.所以,完全可以像使用其它元素一样,对a元素传过来的this进行操作,不会影响到页面的逻辑.
ham (架构师) 2008-07-24
你试试看,写成这样:
<a href="javascript:delete('${id}',this)">删除</a>
42087743 (初级程序员) 2008-07-24
汗。。。这句话可不是我说的
是上面这位兄弟说的。

我想问一下:传递一个this过来,是要进行什么操作呢?

如果是代码出错了,那么说一下错误是什么。
如果只是想问原因,我上面已经做过解答了,如果有不清楚的,可以补充一下。
ham (架构师) 2008-07-24
显然楼主有RP问题。
hax (中级程序员) 2008-07-24
当然了RP问题其实说穿了就是楼主不够细心,没有好好测试。
hax (中级程序员) 2008-07-24