Eu não consigo 'false retorno' para manter .Live () de repetir a propagação código

StackOverflow https://stackoverflow.com/questions/2244502

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu quero botão que isso seja configurado de modo que quando um determinado corpo de texto é clicado, um campo de entrada de texto aparece na tela, eo usuário pode inserir dados no campo, em seguida, clique em um 'salvar' ou 'cancelar' e quer enviá-lo ao banco de dados ou redefinir o valor, respectivamente. No entanto, apesar uso de 'false return', eu não consigo manter este código de ativar repetidamente.

Eu usei die () e que funciona, mas eu também quero ser capaz de reinstantiate o evento original clique depois que o usuário seja salva ou cancela, e não pode pensar em uma maneira de fazer esse trabalho. Agradecemos antecipadamente pela ajuda.

$('td[name]').live("click", function() {
    nameof = $(this).attr("name");
    idof = $(this).attr("id");
    valueof = $(this).html();

    $(this).html('<input type="text" name="' + nameof + '" value="' + valueof + '"><input type="hidden" name="id" value="' + idof + '"><span id="save">save</span> &nbsp <span id="cancel">cancel</span>');

    return false;   
});

Update:

Aqui está o que eu finalmente veio com (inclui todo o código de edição no local):

$('td[name="grouping"] span, td[name="title"] span').live('click', function() {         
    nameof = $(this).parent().attr("name");
    idof = $(this).parent().attr("id");
    valueof = $(this).html();

    if($("table td>span").children('input').length > 0) {} 
    else {
        if($(this).children().length > 0) {} 
        else {
            $(this).html('<input type="text" name="' + nameof + '" value="' + valueof + '"><input type="hidden" name="id" value="' + idof + '"><input type="hidden" name="originalinput" value="' + valueof + '"><span class="save">save</span> &nbsp; <span class="cancel">cancel</span>');
        }
    }

});

$('.cancel').live('click', function() {         
    $(this).parent().html($(this).siblings('input[name="originalinput"]').attr("value"));
});

$('.save').live('click', function() {

    savevalue = $(this).siblings('input[type="text"]').attr("value");
    saveid = $(this).siblings('input[name="id"]').attr("value");
    savecolumn = $(this).siblings('input[type="text"]').attr("name");

    $.ajax({
       type: "POST",
       url: "../php/adminajax.php",
       data: 'id=' + saveid + '&' + savecolumn + '=' + savevalue
    });

    $(this).parent().html(savevalue);
});

$('#saving').ajaxStart( function() {
    $(this).fadeIn(100);
});

$('#saving').ajaxStop( function() {
    $(this).fadeOut(2000);
});

Eu tenho certeza que é muito mais confuso do que qualquer coisa que eu poderia ter baixado, mas pelo menos eu sei o básico de um AJAX edição no lugar agora. Obrigado pela ajuda, tudo.

Foi útil?

Solução

Parece que você está tentando essencialmente para fazer um negócio de edição no local. O problema que você está correndo em é que o clique do usuário está sendo propagada através da caixa de texto / vãos de volta ao seu recipiente pai, desencadeando assim o evento clique novamente. Você precisa filtrá-lo para que ele não escolha de td que têm a entrada dentro de seu conteúdo. Algo ao longo das linhas deste:

$('td[name]:not(td>input)').live(...);

Apesar de não ser uma resposta direta ao que você está procurando por que não usar um plugin existente como um encontrada aqui ?

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