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;