积极答复者
attachEvent如何带两个参数?

问题
-
给表格的行添加onclick事件
row.attachEvent("onclick",newopen(tables.Rows[i].tfbh,this));
this当前这个对象无法传递给
var newopen = function(level,a)
{
return function()
{
View_SelectInfo(level,a);//该函数为外部定义的一个执行函数;
}
}
function View_SelectInfo(info,a)
{
alert(a)//这里显示a是一个对象;
var parent =a.parentNode;
alert(parent);//在这里显示为undefined
for(var i=0;i<parent.childNodes.length;i++)
{
parent.childNodes[i].bgColor = "#FFFFFF";
}
obj.bgColor = "#99c3e9";
var pre = obj.previousSibling;
while(pre!=null)
{
pre.bgColor = "#FFFFFF";
pre = pre.previousSibling;
}
}
我在页面的tr上也直接有引用<tr onclick="View_SelectInfo('<%# Eval("tfbh") %>',this)">这个方法,
这样是没错的,但是当我动态的去给tr添加row.attachEvent("onclick",newopen(tables.Rows[i].tfbh,this));
这个事件后在View_SelectInfo方法里的这里alert(parent);就显示为undefined,
在没有动态给tr添加onclick这个方法以前是没错的。
为什么第一次直接调用View_SelectInfo方法的时候这个a.parentNode都不会出错,动态添加以后就会出错
不好意思刚才没有表达清楚- 已编辑 Aragn 2009年12月9日 7:58
- 已移动 Sheng Jiang 蒋晟 2009年12月9日 19:35 客户端开发问题 (发件人:ASP.NET 与 AJAX)
答案
-
var tables = typhoon.Ajax_Band_DataList(years).value;//获得服务器端返回的DataTable
var TFDataList = document.getElementById("table_list");//获得页面上的table
for(var i=0;i<tables.Rows.length;i++)
{
var row = TFDataList.insertRow();//动态填充页面表格数据
row.attachEvent("onclick",newopen(tables.Rows[i].tfbh,tables.Rows[i]));
}
row.attachEvent("onclick",newopen(tables.Rows[i].tfbh,row));- 已标记为答案 Aragn 2009年12月9日 9:56
全部回复
-
<script>
var newopen = function(level, a) {
return function() {
View_SelectInfo(level, a); //该函数为外部定义的一个执行函数;
}
}
function View_SelectInfo(info, a) {var parent = a.parentNode;
alert(parent);
}
window.onload = function() {
var table1 = document.getElementById("table1");
for (var i = 0; i < table1.rows.length; i++) {table1.rows[i].attachEvent("onclick", newopen(table1.rows[i].tfbh, table1.rows[i]));
}
}</script>
</head>
<body>
<form id="form1" runat="server">
<div><table id="table1">
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
</table></div>
</form>
</body>
</html> -
你的代码我试过了,可以去到行的对象,我是这样写的
function a()
{
//下面这两行代码写法在后面的方法中都取不到这个对象
row.attachEvent("onclick",newopen(tables.Rows[i].tfbh,tables.Rows[i]));
row.attachEvent("onclick",newopen(tables.Rows[i].tfbh,this));
}
var newopen = function(level,a)
{
return function()
{
View_SelectInfo(level,a);//该函数为外部定义的一个执行函数;
}
}
function View_SelectInfo(info,a)
{
alert(a);//显示[object Object]
ChangeTrStyle(a);
}
function ChangeTrStyle(obj)//改变选中行的样式
{
alert(obj);//显示[object Object]
alert(obj.innerTHML);//这里就显示undefined,错也就是在这里,取不到选中的行的对象
var parent =obj.parentNode;
// alert(parent);
// alert(parent.innerHTML);
// alert(parent.childNodes[0].innerHTML);
for(var i=0;i<parent.childNodes.length;i++)//这里显示childNodes为空或不是对象
{
parent.childNodes[i].bgColor = "#FFFFFF";
}
obj.bgColor = "#99c3e9";
var pre = obj.previousSibling;
while(pre!=null)
{
pre.bgColor = "#FFFFFF";
pre = pre.previousSibling;
}
} -
你注意我的代码大小写
<script>
var newopen = function(level, a) {
return function() {
View_SelectInfo(level, a); //该函数为外部定义的一个执行函数;
}function View_SelectInfo(info, a) {
alert(a); //显示[object Object]
ChangeTrStyle(a);
}
function ChangeTrStyle(obj)//改变选中行的样式
{
alert(obj); //显示[object Object]
alert(obj.innerHTML); //你打错了THML 正确是innerHTML
var parent = obj.parentNode;
// alert(parent);
// alert(parent.innerHTML);
// alert(parent.childNodes[0].innerHTML);
for (var i = 0; i < parent.childNodes.length; i++) {
parent.childNodes[i].bgColor = "#FFFFFF";
}
obj.bgColor = "#99c3e9";
var pre = obj.previousSibling;
while (pre != null) {
pre.bgColor = "#FFFFFF";
pre = pre.previousSibling;
}}
}
window.onload = function() {var table1 = document.getElementById("table1");
for (var i = 0; i < table1.rows.length; i++) {table1.rows[i].attachEvent("onclick", newopen(table1.rows[i].tfbh, table1.rows[i]));
}
}</script>
</head>
<body>
<form id="form1" runat="server">
<div><table id="table1">
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
</table></div>
</form>
</body> -
var tables = typhoon.Ajax_Band_DataList(years).value;//获得服务器端返回的DataTable
var TFDataList = document.getElementById("table_list");//获得页面上的table
for(var i=0;i<tables.Rows.length;i++)
{
var row = TFDataList.insertRow();//动态填充页面表格数据
row.attachEvent("onclick",newopen(tables.Rows[i].tfbh,tables.Rows[i]));
} -
var tables = typhoon.Ajax_Band_DataList(years).value;//获得服务器端返回的DataTable
var TFDataList = document.getElementById("table_list");//获得页面上的table
for(var i=0;i<tables.Rows.length;i++)
{
var row = TFDataList.insertRow();//动态填充页面表格数据
row.attachEvent("onclick",newopen(tables.Rows[i].tfbh,tables.Rows[i]));
}
row.attachEvent("onclick",newopen(tables.Rows[i].tfbh,row));- 已标记为答案 Aragn 2009年12月9日 9:56