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);
});
}
Re: JQuery на срабатывает биндинг событий для динам. созд. э
От: der Igel Россия  
Дата: 27.01.09 08:14
Оценка:
Аноним 953 wrote:

> есть таблица

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

Посмотри live events из нового релиза jQuery 1.3.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: JQuery на срабатывает биндинг событий для динам. созд
От: Аноним  
Дата: 27.01.09 14:39
Оценка:
Здравствуйте, der Igel, Вы писали:
DI>Посмотри live events из нового релиза jQuery 1.3.
не помогло, к сожалению.

эти ливевенты вызывают функцию — да. это работает.
но. внутри этой функции я делаю bind для одного из input-ов, которые динманически создавал. Так вот, этот bind не срабатывает. Глюк jquery или я что-то не то сделал?
Re: JQuery на срабатывает биндинг событий для динам. созд. э
От: Mamut Швеция http://dmitriid.com
Дата: 27.01.09 14:57
Оценка:
А>function cloneRow(id, clonedTagsNames, clonedElemTypesNames) {


Попробуй clone(true)

то есть что-то вроде
oldRow.clone(true).attr(id, newid).appendTo(table)


clone(true) клонирует элемент полностью, со всеми обработчиками событий. Если autocomplete не скопируется, то просто добавить в конце .autocomplete(с_опциями)
... << RSDN@Home 1.2.0 alpha 4 rev. 1136>>


dmitriid.comGitHubLinkedIn
Re[2]: JQuery на срабатывает биндинг событий для динам. созд
От: Аноним  
Дата: 28.01.09 19:54
Оценка:
Здравствуйте, Mamut, Вы писали:

M>
А>>function cloneRow(id, clonedTagsNames, clonedElemTypesNames) {
M>


M>Попробуй clone(true)


M>то есть что-то вроде

M>
M>oldRow.clone(true).attr(id, newid).appendTo(table)
M>


M>clone(true) клонирует элемент полностью, со всеми обработчиками событий. Если autocomplete не скопируется, то просто добавить в конце .autocomplete(с_опциями)

тоже не совсем помогло
решил траблу через чистый JS
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.