JQuery на срабатывает биндинг событий для динам. созд. эл.
От: Аноним  
Дата: 26.01.09 23:37
Оценка:
Здравствуйте
есть таблица
внизу таблицы есть кнопка Add
при её нажатие происходит добавление новой строки,
в неё копирую контролы из самой первой строки, происходит эдакое "клонирование".
почему не использую cloneNode(true)? потому что это корректно работает с ФФ, в ИЕ — траблы,
связанные с тем, что если так вот склонировать, то потом при вводе данных в склонированный контрол, они лезут
в тот. кто был эталоном клонирования т.е. в самую первую строку.
приходится таким образом копировать.
после чего, пытаюсь добавить обработчик события на <input которые лежат внутри склонированной строки
биндинга не происходит в ИЕ(только в ФФ), к сожалению
перепробывал кучу вариантов, не знаю ,куда уже двигаться...
подскажите. кто что может
вот немного кода:

function cloneRow(id, clonedTagsNames, clonedElemTypesNames) {
var root = $("#" + id)[0].parentNode; //the root
var allRows = root.getElementsByTagName('tr'); //the rows' collection

var newRow = root.insertRow(allRows.length);
var cRow = $("#" + id)[0];
for (var i = 0; i < cRow.cells.length; i++) {
var oldCell = cRow.cells[i];
var newCell = document.createElement("TD");
newCell.innerHTML = oldCell.innerHTML;
newRow.appendChild(newCell);
}

var inputElemCollection = new Array();
for (var j = 0; j < clonedTagsNames.length; j++) {
inputElemCollection = newRow.getElementsByTagName(clonedTagsNames[j]);
if (null != inputElemCollection && inputElemCollection.length > 0) {
//var clonedTagsNames = ['input', 'select', 'textarea'];
//var clonedElemTypesNames = ['text', 'password', 'checkbox', 'hidden'];
for (var i = 0; i < inputElemCollection.length; ++i) {
var nodeName = inputElemCollection[i].nodeName.toLowerCase();
if ($(clonedTagsNames).any(function() { return nodeName == this })) {
if ('input' == nodeName) {
inputElemCollection[i].value = "";
var inputType = inputElemCollection[i].type.toLowerCase();
if ('input' == nodeName && !$(clonedElemTypesNames).any(function()
{ return inputType == this }))
continue;
}
}
if (inputElemCollection[i].id.startsWith(clonedElemPrefix)) {
inputElemCollection[i].value = "";
inputElemCollection[i].id = clonedElemPrefix + Flag + allRows.length;
inputElemCollection[i].name = clonedElemPrefix + Flag + allRows.length;

}
else {
inputElemCollection[i].id = inputElemCollection[i].id + allRows.length;
inputElemCollection[i].name = inputElemCollection[i].name + allRows.length;

}
}
}

afterCloning(newRow);
}

function afterCloning(newRowAfterCloning) {

if (newRowAfterCloning.sectionRowIndex > 0) {
var index = newRowAfterCloning.sectionRowIndex;
BindAutosuggestControl(clonedElemPrefix + Flag + (index + 1), 'AutoSuggestFlag','Flags', flagFormat, interestParseResponse,flagSelectAutoCompleteItem);
}
}

function BindAutosuggestControl(id, urlAction, resultId, formatFunc, parseFunc, selectFunc) {
$("#" + id).autocomplete(appRoot + urlAction + '/', {
delay:10,
dataType: 'json',
minChars: 1,
matchSubset: 1,
autoFill: true,
matchContains: 1,
cacheLength: 0,
selectFirst: true,
formatItem: formatFunc,
maxItemsToShow: 10,
parse: function(data) {
return parseFunc(data)
}
});

$("#" + id).result(function(event, data, formatted) {
selectFunc(event, data, formatted, resultId);
});
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.