フォームに1つ以上の行があるテーブルがあり、各行には、次のように、含むのIDを含むonchangeハンドラーを持ついくつかの<select
>フィールドとフィールドが含まれています。<input>
tr
<select id="System_row_0_environment" class="fixedwidth"
onchange="changeAccessSystem('System_row_0', 'environment')" name="System_environment">
行の1つを複製し、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
。