Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Почему вызывается событие click #saveChanges, сразу replaceWith с #updateOrderLine (https://javascript.ru/forum/jquery/39843-pochemu-vyzyvaetsya-sobytie-click-savechanges-srazu-replacewith-s-updateorderline.html)

Алимпаша 14.07.2013 12:41

Почему вызывается событие click #saveChanges, сразу replaceWith с #updateOrderLine
 
Я только, только начал разбираться в JS прошу не судить строго.
$('input#updateOrderLine').replaceWith("<input id=saveChanges type=submit value='Сохранить' /input>");
$('#saveChanges').click(saveChangesOrderLine.call(this, true));

function saveChangesOrderLine(update) {
    var currentOrderLine =
    {
        id: 0
    };
currentOrderLine.id = $(this).closest('table.detailOrderLine').attr('id').substr(16, 4);

Проблема в том, что вызов функции saveChangesOrderLine происходит сразу после замены input'a с помощью replaceWith и this вместо нужного мне элемента #saveChanges становится input#updateOrderLine.
P.S. Если что то не понятно объяснил или не досказал, прошу задавать вопросы.

Алимпаша 14.07.2013 15:33

Не ужели такой сложный вопрос и никто не знает, что делать? Помогите кто нибудь хотя бы предположения в какую сторону "копать".

Алимпаша 15.07.2013 10:39

Спасибо всем за помощь. Может кому то еще пригодится.
Проблема состояла в том, что выше указанный код запускался при обработке события click элемента input#updateOrderLine, поэтому this и передавал этот элемент. Решение заключается в том, что нужно вынести биндинг saveChangesOrderLine в основную функцию ready, которая запускается сразу после загрузки DOM. Биндить нужно при помощи функции $('родительский элемент').on('click', '#saveChanges', saveChangesOrderLine), потому что on может забиндить(соединить) новые элементы добавленные на форму с обработчиком, а bind может забиндить только уже существующие элементы на форме.


Часовой пояс GMT +3, время: 09:49.