jQuery的动态添加/删除行功能,它的clone()对象不能修改元素名称
我正在尝试使用 jQuery 添加动态添加/删除行功能,但我在 IE8 中遇到一些问题,它的 clone() 对象无法修改元素名称并且无法使用 javascript 形式 (prhIndexed[i].prhSrc).functionKey。
在FireFox中它运行得很好,源代码作为附件,请帮我一个忙,帮助我解决问题。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var _table = jQuery("#prh");
var _tableBody = jQuery("tbody",_table);
var _addRowBtn = jQuery("#controls #addRow");
var _addRowsNumber= jQuery("#controls #add_rows_number");
var blankRowID = "blankRow";
_addRowBtn.click(function(){
var newRow = jQuery("#"+blankRowID).clone(true)
.appendTo(_tableBody)
.attr("style", "display: ''")
.addClass("rowData")
.removeAttr("id");
}
refreshTable(_table);
}
return false;
});
function refreshTable(_table){
var tableId = _table.attr('id');
var count =1; // ignore hidden column
jQuery ( "#"+tableId ).find(".rowData").each(function(){
jQuery(this).attr('id', tableId + "_" + count );//// update tr rowid
count ++;
});
count =0;
jQuery ( "#"+tableId ).find("input[type='checkbox'][name^='"+tableId+"']").not(".checkBoxAll").each(function(){
jQuery(this).attr('id', tableId + "_ckbox" + count );
jQuery(this).attr('name', tableId + "_" + count ); // IE8 cannot modify name ??
count ++;
});
};
});
</script>
超文本标记语言
<body>
<form >
<div id="controls">
<table width="350px" border="0">
<tr><td>
<input id="addRow" type="button" name="addRows" value="Add Row" />
<input id="add_rows_number" type="text" name="add_rows_number" value="1" style="width:20px;" maxlength="2" />
<input id="insertRow" type="button" name="insert" value="Insert Row" />
<input id="removeRow" type="button" name="deleteRows" value="Delete Row" />
</td></tr>
</table></div>
<table id="prh" width="350px" border="1">
<thead>
<tr class="listheader">
<td nowrap width="21"><input type="checkbox" name="prh_" class="checkBoxAll"/></td>
<td nowrap width="32">Sequence</td>
<td nowrap width="153" align="center">Channel</td>
<td nowrap width="200">Source</td>
</tr>
</thead>
<tbody>
<!-- dummy row -->
<tr id='blankRow' style="display:none" >
<td><input type="checkbox" id='prh_ckbox0' name='prh_0' value=""/></td>
<td align="right"><input type="text" name="prhIndexed[0].prhSeq" maxlength="10" value="" onkeydown="" onblur="" onfocus="" readonly="readonly" style="width:30px;background-color:transparent;border:0;line-height:13pt;color: #993300;background-color:transparent;border:0;line-height:13pt;color: #993300;"></td>
<td><select name="prhIndexed[0].prhChannelproperty"><option value=""></option>
<option value="A01">A01</option>
<option value="A02">A02</option>
<option value="A03">A03</option>
<option value="A04">A04</option>
</select></td>
<td><input type="text" name="prhIndexed[0].prhSrc" maxlength="6" value="new" style="width:80px;background-color:#FFFFD7;">
<div id='displayPrhSrcName0'></div>
</td>
</tr>
<!-- row data -->
<tr id='prh_1' class="rowData">
<td><input type="checkbox" id='prh_ckbox1' name='prh_1' value=""/></td>
<td align="right"><input type="text" name="prhIndexed[1].prhSeq" maxlength="10" value="1" onkeydown="" onblur="" onfocus="" readonly="readonly" style="width:30px;background-color:transparent;border:0;line-height:13pt;color: #993300;background-color:transparent;border:0;line-height:13pt;color: #993300;"></td>
<td><select name="prhIndexed[1].prhChannelproperty"><option value=""></option>
<option value="A01">A01</option>
<option value="A02">A02</option>
<option value="A03">A03</option>
<option value="A04">A04</option>
</select></td>
<td><input type="text" name="prhIndexed[1].prhSrc" maxlength="6" value="new" style="width:80px;background-color:#FFFFD7;">
<div id='displayPrhSrcName0'></div>
</td>
</tr>
</tbody>
</table>
</form >
</body>
I'm trying to use jQuery to add dynamic Add/Remove row function, but I meet some question in IE8, its clone() object cannot modify element name and cannot use javascript form (prhIndexed[i].prhSrc).functionKey.
In FireFox it works very well, source code as attachment, please do me a favor and help me to solve the problem.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var _table = jQuery("#prh");
var _tableBody = jQuery("tbody",_table);
var _addRowBtn = jQuery("#controls #addRow");
var _addRowsNumber= jQuery("#controls #add_rows_number");
var blankRowID = "blankRow";
_addRowBtn.click(function(){
var newRow = jQuery("#"+blankRowID).clone(true)
.appendTo(_tableBody)
.attr("style", "display: ''")
.addClass("rowData")
.removeAttr("id");
}
refreshTable(_table);
}
return false;
});
function refreshTable(_table){
var tableId = _table.attr('id');
var count =1; // ignore hidden column
jQuery ( "#"+tableId ).find(".rowData").each(function(){
jQuery(this).attr('id', tableId + "_" + count );//// update tr rowid
count ++;
});
count =0;
jQuery ( "#"+tableId ).find("input[type='checkbox'][name^='"+tableId+"']").not(".checkBoxAll").each(function(){
jQuery(this).attr('id', tableId + "_ckbox" + count );
jQuery(this).attr('name', tableId + "_" + count ); // IE8 cannot modify name ??
count ++;
});
};
});
</script>
HTML
<body>
<form >
<div id="controls">
<table width="350px" border="0">
<tr><td>
<input id="addRow" type="button" name="addRows" value="Add Row" />
<input id="add_rows_number" type="text" name="add_rows_number" value="1" style="width:20px;" maxlength="2" />
<input id="insertRow" type="button" name="insert" value="Insert Row" />
<input id="removeRow" type="button" name="deleteRows" value="Delete Row" />
</td></tr>
</table></div>
<table id="prh" width="350px" border="1">
<thead>
<tr class="listheader">
<td nowrap width="21"><input type="checkbox" name="prh_" class="checkBoxAll"/></td>
<td nowrap width="32">Sequence</td>
<td nowrap width="153" align="center">Channel</td>
<td nowrap width="200">Source</td>
</tr>
</thead>
<tbody>
<!-- dummy row -->
<tr id='blankRow' style="display:none" >
<td><input type="checkbox" id='prh_ckbox0' name='prh_0' value=""/></td>
<td align="right"><input type="text" name="prhIndexed[0].prhSeq" maxlength="10" value="" onkeydown="" onblur="" onfocus="" readonly="readonly" style="width:30px;background-color:transparent;border:0;line-height:13pt;color: #993300;background-color:transparent;border:0;line-height:13pt;color: #993300;"></td>
<td><select name="prhIndexed[0].prhChannelproperty"><option value=""></option>
<option value="A01">A01</option>
<option value="A02">A02</option>
<option value="A03">A03</option>
<option value="A04">A04</option>
</select></td>
<td><input type="text" name="prhIndexed[0].prhSrc" maxlength="6" value="new" style="width:80px;background-color:#FFFFD7;">
<div id='displayPrhSrcName0'></div>
</td>
</tr>
<!-- row data -->
<tr id='prh_1' class="rowData">
<td><input type="checkbox" id='prh_ckbox1' name='prh_1' value=""/></td>
<td align="right"><input type="text" name="prhIndexed[1].prhSeq" maxlength="10" value="1" onkeydown="" onblur="" onfocus="" readonly="readonly" style="width:30px;background-color:transparent;border:0;line-height:13pt;color: #993300;background-color:transparent;border:0;line-height:13pt;color: #993300;"></td>
<td><select name="prhIndexed[1].prhChannelproperty"><option value=""></option>
<option value="A01">A01</option>
<option value="A02">A02</option>
<option value="A03">A03</option>
<option value="A04">A04</option>
</select></td>
<td><input type="text" name="prhIndexed[1].prhSrc" maxlength="6" value="new" style="width:80px;background-color:#FFFFD7;">
<div id='displayPrhSrcName0'></div>
</td>
</tr>
</tbody>
</table>
</form >
</body>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我真的建议提出具体的、简短的、明确的问题。没有多少人愿意爬行你的所有代码和内容。标记来为您查找错误。
我刚刚注意到一件事,也许它与您的问题有关:
这里有几件事:
用
.attr()
修改样式不是一个好主意。使用 jQuery 的.css()
函数。像您一样将
display
设置为空字符串也不是一个好主意。做:或本机
所以基本上该调用应该如下所示:
I really recommend to ask specified, short and clear questions. Not many people are willing to crawl through all your code & markup to find an error for you.
I just noticed one thing, maybe it has to do with your problem:
Several things here:
Modifiying the style with
.attr()
is not a good idea. Use jQuerys.css()
function.Setting
display
to an empty string like you do, is also not a good idea. Do:or natively
So basically that call should look like this:
上周,我重新绘制了表格,问题解决了!
In last weet,I was redraw my table, the problem finised !!