Я использую метод jQuery clone () для клонирования строки таблицы, затем использую метод attr () для изменения имени / идентификатора некоторых полей.Все это работает хорошо, и если я использую «просмотр сгенерированного источника», имена / идентификаторы устанавливаются правильно, однако, когда сгенерированный контент вызывает событие JavaScript, он запускает его, как если бы это был родительский элемент.Например, у меня есть элемент с именем / идентификатором 'slast1', который должен запускать метод автозаполнения (основанный на том факте, что он является частью класса 'slast') и который работает нормально.К сожалению, когда я щелкаю по тому же элементу в сгенерированной строке (в данном случае id / name элемента - «slast2»), он запускает метод автозаполнения, но действует так, как если бы он был запущен из родительского элемента, «slast1».Кажется, я не могу найти способ обойти это и думаю, что это может быть ограничением использования метода clone (), но я надеюсь, что мне чего-то не хватает.
function fnAddRow(iRow)
{
var iNewRow = iRow+1;
$("#tblAuthors tr:last").clone(true).insertAfter("#tblAuthors tr:last");
$("#tblAuthors tr:last #slast"+iRow).attr("name", "slast"+iNewRow);
$("#tblAuthors tr:last #slast"+iRow).attr("id", "slast"+iNewRow);
$("#slast"+iNewRow).val("");
}
Приведенный выше код клонирует таблицустрока и изменяет атрибуты, как я уже упоминал ранее.Приведенный ниже код запускается событием keydown в элементе slastX, но по любой причине сгенерированные элементы обрабатываются так, как если бы они были родительскими.
$(function()
{
var aEmps =
[
<?php
echo $sEmps;
?>
];
$(".slast").bind( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).data( "autocomplete" ).menu.active )
{ event.preventDefault();}
})
.autocomplete({
source: aEmps,
close: function(event, ui)
{
// Split return value and store in array
var aName = this.value.split(", ");
// Get row #
var iRow = this.name[this.name.length-1];
// Populate values
$("#slast"+iRow).val(aName[0]);
$("#sfirst"+iRow).val(aName[1]);
$("#smi"+iRow).val(aName[2]);
}
});
});
Как видно из автозаполненияметод должен запускаться чем-либо с классом «slast», но по причинам, по которым я не могу понять, $ (this) всегда = родитель («slast1»), а не «slast2» или любой другой сгенерированный контент.