为什么我在动态增加的TR上附加onKeyDown事件总是不成功?请大侠看看! oRow.attachEvent("onKeyDown",new Function("ChangeRow()"));--->>>oRow.onkeydown=ChangeRow; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 onkeydown全部小写oRow.attachEvent("onkeydown",function(){SelectRow(this)}) 我的意思不仅仅KEYDOW不行这下面的事件都附加不上去//--------附加事件代码是否正确?- oRow.attachEvent("onActivate",new Function("SelectRow(this)")); oRow.attachEvent("onKeyDown",new Function("ChangeRow()"));//---------------------------- 循环给每个tr添加事件触发oRow[i].attachEvent() oRow.attachEvent("onKeyDown",ChangeRow); 这种?不行的啊!!oRow.attachEvent("onactivate",function(){SelectRow(this);});oRow.attachEvent("onkeydown",function(){return ChangeRow();}); 可能是attachevent对tr失效了.用以下代码可行oRow.attachEvent("onKeyDown",new Function("ChangeRow()"));--->>>oRow.onkeydown=ChangeRow; 四种方法,自己逐个试试<table id="t" border="1"><tr><td>click</td></tr><tr><td>click</td></tr><tr><td>click</td></tr><tr><td>click</td></tr><tr><td>click</td></tr><tr><td>click</td></tr><tr><td>click</td></tr><tr><td>click</td></tr><tr><td>click</td></tr><tr><td>click</td></tr><tr><td>click</td></tr><tr><td>click</td></tr></table><SCRIPT LANGUAGE="JavaScript">var t = document.getElementById("t");for (var i=0;i<t.rows.length;i++) {// t.rows[i].firstChild.attachEvent("onclick",test);// t.rows[i].firstChild.onclick = function() {test(",cloudchen")}// t.rows[i].firstChild.onclick = test; t.rows[i].firstChild.attachEvent("onclick",new Function("test(',cloudchen')"));}function test() { var attach=arguments.length>0?arguments[0]:""; alert("test"+attach);}</SCRIPT> 事实上你的附加已经成功了.但是可能因为你对事件的理解上的误解,导致程序并没有达到你预想的要求.所以建议去msdn查看事件的参考文档.<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>无标题文档</title><script language="javascript">var CurrentRow = null ;function SelectRow(row){ alert("DDDDDDD") if (CurrentRow != null) { CurrentRow.className = "UnSelected" ; } CurrentRow = row ; row.className = "Selected" ;}function ChangeRow(){ alert("EEEEEEE") var keyCode = event.keyCode ; var obj ; if (CurrentRow == null) return ; if (keyCode == 13) { // 回车 CurrentRow.fireEvent("onDblClick") ; return false; } if (keyCode == 38) { // 向上 obj = CurrentRow.previousSibling ; } if (keyCode == 40) { // 向下 obj = CurrentRow.nextSibling ; } // 表的第一个子项是表头,必须排除 if (obj != null && obj.rowIndex !=0) { obj.setActive() ; obj.fireEvent("onActivate") ; obj.focus() ; }}function createRows(){ var oRow = oTable.insertRow(oTable.rows.length);//--------附加事件代码是否正确?- oRow.attachEvent("onActivate",new Function("SelectRow(this)")); oRow.attachEvent("onKeyDown",new Function("ChangeRow()"));//---------------------------- var aRows = oTable.rows; for(var i = 0;i < oTable.rows(0).cells.length;i++) { var aCells = oRow.cells; var oCell = aRows(oRow.rowIndex).insertCell(aCells.length); oCell.innerHTML = " "; oCell.Class = "Mytd"; }}function removeRows(){}</script><style type="text/css"><!--th { font-family: "宋体"; font-size: 9pt; font-weight: normal; background-color: #C6DFC1; border: 1px solid; border-bottom-width: 1px; border-bottom-color: #666666; border-left-width: 1px; border-left-color: #FFFFFF; border-right-width: 1px; border-right-color: #000000; border-top-width: 1px; border-top-color: #FFFFFF; height: 18px;}.Mytd { border: 1px ridge; border-bottom-width: 1px; border-bottom-color: #666666; border-left-width: 0px; border-left-color: #666666; border-right-width: 1px; border-right-color: #666666; border-top-width: 0px; border-top-color: #666666; font-family: "宋体"; font-size: 9pt; text-align: left; vertical-align: middle; text-indent: 2px; height: 15px;}.Mytable { border: 1px ridge; border-bottom-width: 0px ; border-bottom-color: #666666 ; border-left-width: 1px ; border-left-color: #000000 ; border-right-width: 0px ; border-right-color: #666666 ; border-top-width: 1px ; border-top-color: #000000 ; }.Selected { background-color: #000000; color:#FFFFFF ;}.UnSelected { background-color: #FFFFFF;}--></style></head><body><table width="75%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td> </td> </tr> <tr> <td> <table width="75%" border="0" align="center" cellpadding="0" cellspacing="0" class="Mytable" style="word-break:keep-all;" id="oTable"> <tr> <th width="34">姓名</th> <th width="32">学号</th> <th width="33">班级</th> </tr> <tr onActivate="SelectRow(this);" onKeyDown="return ChangeRow();" class="Mytd"> <td> </td> <td> </td> <td> </td> </tr> <tr onActivate="SelectRow(this);" onKeyDown="return ChangeRow();" class="Mytd"> <td> </td> <td> </td> <td> </td> </tr> </table><input name="hidTable" type="hidden"></td> </tr> <tr> <td align="center"><input type="button" value="createRows" onClick="JavaScript:createRows()"> <input type="button" value="removeRows"></td> </tr></table></body></html> 我是指我新增加的行没有附加上SelectRow(this)ChangeRow()两个FUNCTION啊 根据我的经验,不要在动态附加的响应函数里加this参数,因为这时传入的this并不代表你认为的td对象,而是函数内部的this对象。建议使用id代替this。 事件函数中不要使用this,而是用event.srcElement替代 怎么样用正达表达式验证身份证 跨页面控制问题 hokee来帮忙看看,ext问题 能不能实现这个功能,如果A标签嵌入IMG,如何让A标签失效,或让IMG onclick有效 加了滚动条后,div坐标定位问题? 请问:如何让在网页上显示的树在刷新后不恢复成原始的全close状态,而是保持当前状态 JS中时间对比问题 如何得到file里的文件名? 能教我一下吗?? 小问题!在线等各位哥哥 姐姐! 控件名称用变量命令后操控的问题,急! 如何在脚本中写代码在新窗口中显示网页内容
oRow.attachEvent("onkeydown",function(){SelectRow(this)})
这下面的事件都附加不上去//--------附加事件代码是否正确?-
oRow.attachEvent("onActivate",new Function("SelectRow(this)"));
oRow.attachEvent("onKeyDown",new Function("ChangeRow()"));
//----------------------------
oRow[i].attachEvent()
不行的啊!!oRow.attachEvent("onactivate",function(){SelectRow(this);});
oRow.attachEvent("onkeydown",function(){return ChangeRow();});
用以下代码可行
oRow.attachEvent("onKeyDown",new Function("ChangeRow()"));--->>>oRow.onkeydown=ChangeRow;
<tr><td>click</td></tr>
<tr><td>click</td></tr>
<tr><td>click</td></tr>
<tr><td>click</td></tr>
<tr><td>click</td></tr>
<tr><td>click</td></tr>
<tr><td>click</td></tr>
<tr><td>click</td></tr>
<tr><td>click</td></tr>
<tr><td>click</td></tr>
<tr><td>click</td></tr>
<tr><td>click</td></tr>
</table>
<SCRIPT LANGUAGE="JavaScript">
var t = document.getElementById("t");
for (var i=0;i<t.rows.length;i++) {
// t.rows[i].firstChild.attachEvent("onclick",test);
// t.rows[i].firstChild.onclick = function() {test(",cloudchen")}
// t.rows[i].firstChild.onclick = test;
t.rows[i].firstChild.attachEvent("onclick",new Function("test(',cloudchen')"));
}
function test() {
var attach=arguments.length>0?arguments[0]:"";
alert("test"+attach);
}
</SCRIPT>
所以建议去msdn查看事件的参考文档.<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<script language="javascript">
var CurrentRow = null ;
function SelectRow(row)
{
alert("DDDDDDD")
if (CurrentRow != null)
{
CurrentRow.className = "UnSelected" ;
}
CurrentRow = row ;
row.className = "Selected" ;
}function ChangeRow()
{
alert("EEEEEEE")
var keyCode = event.keyCode ;
var obj ;
if (CurrentRow == null)
return ;
if (keyCode == 13)
{
// 回车
CurrentRow.fireEvent("onDblClick") ;
return false;
}
if (keyCode == 38)
{
// 向上
obj = CurrentRow.previousSibling ;
}
if (keyCode == 40)
{
// 向下
obj = CurrentRow.nextSibling ;
}
// 表的第一个子项是表头,必须排除
if (obj != null && obj.rowIndex !=0)
{
obj.setActive() ;
obj.fireEvent("onActivate") ;
obj.focus() ;
}
}
function createRows()
{
var oRow = oTable.insertRow(oTable.rows.length);
//--------附加事件代码是否正确?-
oRow.attachEvent("onActivate",new Function("SelectRow(this)"));
oRow.attachEvent("onKeyDown",new Function("ChangeRow()"));
//----------------------------
var aRows = oTable.rows;
for(var i = 0;i < oTable.rows(0).cells.length;i++)
{
var aCells = oRow.cells;
var oCell = aRows(oRow.rowIndex).insertCell(aCells.length);
oCell.innerHTML = " ";
oCell.Class = "Mytd";
}
}
function removeRows()
{}</script>
<style type="text/css">
<!--
th {
font-family: "宋体";
font-size: 9pt;
font-weight: normal;
background-color: #C6DFC1;
border: 1px solid;
border-bottom-width: 1px;
border-bottom-color: #666666;
border-left-width: 1px;
border-left-color: #FFFFFF;
border-right-width: 1px;
border-right-color: #000000;
border-top-width: 1px;
border-top-color: #FFFFFF;
height: 18px;
}
.Mytd {
border: 1px ridge;
border-bottom-width: 1px;
border-bottom-color: #666666;
border-left-width: 0px;
border-left-color: #666666;
border-right-width: 1px;
border-right-color: #666666;
border-top-width: 0px;
border-top-color: #666666;
font-family: "宋体";
font-size: 9pt;
text-align: left;
vertical-align: middle;
text-indent: 2px;
height: 15px;
}
.Mytable {
border: 1px ridge;
border-bottom-width: 0px ;
border-bottom-color: #666666 ;
border-left-width: 1px ;
border-left-color: #000000 ;
border-right-width: 0px ;
border-right-color: #666666 ;
border-top-width: 1px ;
border-top-color: #000000 ;
}
.Selected { background-color: #000000; color:#FFFFFF ;}
.UnSelected { background-color: #FFFFFF;}
-->
</style>
</head><body>
<table width="75%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td> </td>
</tr>
<tr>
<td>
<table width="75%" border="0" align="center" cellpadding="0" cellspacing="0" class="Mytable" style="word-break:keep-all;" id="oTable">
<tr>
<th width="34">姓名</th>
<th width="32">学号</th>
<th width="33">班级</th>
</tr>
<tr onActivate="SelectRow(this);" onKeyDown="return ChangeRow();" class="Mytd">
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr onActivate="SelectRow(this);" onKeyDown="return ChangeRow();" class="Mytd">
<td> </td>
<td> </td>
<td> </td>
</tr>
</table><input name="hidTable" type="hidden"></td>
</tr>
<tr>
<td align="center"><input type="button" value="createRows" onClick="JavaScript:createRows()"> <input type="button" value="removeRows"></td>
</tr>
</table>
</body>
</html>
SelectRow(this)
ChangeRow()
两个FUNCTION啊
建议使用id代替this。