2012-06-01 2 views
-1

У меня есть кнопка редактирования, которая при нажатии вызывает три события ниже. У него (отредактируйте форму) также есть ссылка на отмену, которая при щелчке вызывает второе событие ниже. Как я могу гарантировать, что значение PrevContent доступно в событии отмены? Пользователь может нажимать на любое количество соответствующих ссылок редактирования за один раз.Передача переменной между событиями

$('.js-profile-edit').live('click',function(){ 

    var TrBlock  = $(this).closest('tr'); 
    var PrevContent = TrBlock.html(); 
    var colspan  = TrBlock.parent().prev().find('a:first').first().data('span'); 

    $.ajax({ 
     url  : $(this).attr('href'), 
     type : 'GET', 
     success : function(response){ 
      TrBlock.html('<td colspan="'+colspan+'">'+response+'</td>'); 
     }, 
     error : function(jqXHR, textStatus, errorThrown){ 
      uiAlert({message : 'Something Broke. Try again later'}) 
     } 
    }); 
    return false; 
}); 


$('.js-profile-edit-cancel').live('click',function(){ 
    $(this).closest('tr').html(PrevContent); 
    return false; 
}); 
+0

Просто не по теме, '.liv e() 'устарел после jQuery 1.7. Я использовал '.delegate()' с тех пор: http://api.jquery.com/delegate/ –

+0

@ spryno724, так что делегировать падение взамен на живую. я попытался, но это не сработало – aWebDeveloper

+0

Для вашего случая вы бы использовали что-то вроде '$ ('body'). delegate ('. js-profile-edit', 'click', function() {})' –

ответ

0

Вы должны быть в состоянии хранить prevContent в .data() на ближайшем <tr>:

$('.js-profile-edit').live('click',function(){ 

    var TrBlock  = $(this).closest('tr'); 
    var PrevContent = TrBlock.html(); 
    TrBlock.data({contents: PrevContent}); // save it 
    ... 
}) 

$('.js-profile-edit-cancel').live('click',function() { 
    var TrBlock = $(this).closest('tr'); 
    TrBlock.html(TrBlock.data('contents')); 
    return false; 
}); 
+0

не будет ли это испортить html – aWebDeveloper

1

Может быть, вы могли бы набивать PrevContent к data object вашей кнопки отмены.

Написать в js-profile-edit клик обработчика:

$('.js-profile-edit-cancel').data('PrevContent', PrevContent); 

и читать в js-profile-edit-cancel клик обработчика:

var PrevContent = $(this).data('PrevContent'); 
Смежные вопросы