我的表单上有一个表,其中包含一行或多行,每行包含一些<select
> 和<input>
字段,这些字段具有包含包含的 id 的 onchange 处理程序tr
,如
<select id="System_row_0_environment" class="fixedwidth"
onchange="changeAccessSystem('System_row_0', 'environment')" name="System_environment">
我想克隆其中一行,并更新 id 和对 onchange 处理程序的调用。(idGlob 是一个带行数的全局变量)
function cloneLine(previd) {
var id = '<% $prefix %>_row_' + idGlob;
idGlob++;
var $prevLine = jQuery('#' + previd);
var prevId = $prevLine.attr('id');
var regExp = new RegExp(prevId, 'g');
var replaceIdFunction = function(row, attr) {
if (attr) {
return attr.replace(regExp, id);
}
};
var $newLine = $prevLine.clone();
$newLine.attr('id', id).find('*').each(function(index, element) {
jQuery(element).attr(
{
'id': replaceIdFunction,
'onchange' : replaceIdFunction,
'for' : replaceIdFunction,
'onclick' : replaceIdFunction
})
});
// XXX This is a work-around for a bug in Firefox. Clone is supposed to
// copy the value, but it doesnt for select and textarea!
// https://bugzilla.mozilla.org/show_bug.cgi?id=230307
$prevLine.
find('select,textarea').each(function(index, element) {
var $element = jQuery(element);
var name = $element.attr('name');
$newLine.find('[name="' + name + '"]').val(
$element.val());
});
$prevLine.after($newLine);
}
这在所有常见的嫌疑人(Chrome,Firefox,Safari)中都很好用,但在 IE 上出于某种奇怪的原因,即使您使用 Firebug Lite 检查元素并且它显示克隆具有onchange="changeAccessSystem('System_row_1', 'environment')
,当您更改它时,changeAccessSystem 函数被调用第一个参数是“System_row_0”。我是否打电话似乎并不重要.clone
。true
false