Pergunta

... pelo menos para mim. Este código usado para funcionar bem. Tenho certeza de que nada mudou, mas agora, de repente, se comporta estranhamente. Basicamente, estou tentando criar funcionalidade de edição em linha. Quando o usuário clica no link, ele gera dinamicamente uma caixa de texto e um link de confirmação e cancelamento. Estou tendo problemas com o link de cancelamento não removendo tudo na célula.

Html:

...
<td class="bid">
   <a href="javascript:" class="102093" title="Click to modify bid">$0.45</a>
</td>
...

JQuery de ligação (em $(function())):

$('.bid a').live('click', renderBidChange);
....
$('.report_table .cancel').live('click', cancelUpdate); 

renderBidChange (Esta função cria os elementos dinâmicos):

function renderBidChange(){
    var cpc = $(this);
    var value = cpc.text().replace('$', '');
    var cell = cpc.parent('.bid');
    cpc.hide();

    var input = document.createElement('input');
    $(input).attr({type:'text',class:'dynamic cpc-input'}).val(value);
    cell.append(input);

    var accept = document.createElement('a');
    $(accept).addClass('accept').attr({'href':'javascript:',
      'title':'Accept Changes'}).text('Accept Changes');
    cell.append(accept);

    var cancel = document.createElement('a');
    $(cancel).addClass('cancel').attr({'href':'javascript:',
      'title':'Cancel Changes'}).text('Cancel Changes');
    cell.append(cancel);

    $(input).focus();
    input.select();
}

cancelUpdate Essa função apenas remove tudo visível (todo o lixo dinâmico neste caso) na célula e mostra o que costumava estar lá.

function cancelUpdate(){
    var cell = $(this).parent();
    cell.find(':visible').remove();
    cell.find(':hidden').show();
}

No entanto, por algum motivo, o link de cancelamento permanece após o clique! Todo o resto é removido, exceto isso. Wtf

Obrigado por qualquer insight que você possa fornecer! Tenho certeza de que são apenas alguns pequenos detalhes estúpidos que eu acabo [cafeinedly] parecendo ...

ATUALIZAR Imediatamente após postar isso, epinchei que pode ser um problema do CSS, mas depois de verificar meu código, não é.

Foi útil?

Solução

Você precisa de um pequeno ajuste aqui:

$('.bid a:not(.cancel)').live('click', renderBidChange);

Desde que você se mudou para .live(), a primeira função também está sendo executada com um clique em Cancelar :)

Outras dicas

O que acontece se você mudar:

$('.report_table .cancel').live('click', cancelUpdate); 

para

$('.bid .cancel').live('click', cancelUpdate); 

Não espero uma solução, mas estou apenas duplamente

Qual é a função "ao vivo" para .Acept? Funciona (presumivelmente assim)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top