как клонировать формы в javascript сохраняя привязки событий - PullRequest
0 голосов
/ 18 мая 2010

Я собираюсь клонировать часть формы, некоторые действия которой связаны с click событиями. Я хочу изменить все вхождения слова TEMPLATE в атрибутах на 'n_'+ID. Я хочу абстрагироваться от структуры клонированной части - это будет один TEMPLATE или 10. Я пытался что-то подобное, но привязки теряются:

insert = function(){
    var old = $('#TEMPLATE');
    var copy = old.clone(true); 
    var html = old.html().replace(/TEMPLATE/g,'n'+next_ID);
    old.html(html);
    old.attr('id','n'+next_ID);
    old.show('fast');
    old.after(copy);
    next_ID++;
}

Есть ли способ сделать это легко, ничего не зная о структуре скопированного элемента.

1 Ответ

2 голосов
/ 18 мая 2010

Нет. Вам придется заново добавлять обработчики каждый раз.

Если вы действительно хотите этого избежать, используйте делегирование событий (delegate() или live()), чтобы присоединить ваши обработчики событий. Таким образом, они не связаны с конкретными объектами узла, а только размещают элементы, соответствуют ли они селектору, во время срабатывания события.

$(myform).delegate('.dosomething', 'click', function() {
    // handle clicks on any .dosomething in the form now or added later
});

(И старайтесь избегать обработки текста через html() / innerHTML. Это ненадежно. Лучше перебирать объекты, имена или классы которых вы хотите изменить, используя attr.)

...