Non riesco a 'return false' per mantenere .Live () da ripetere codice di propagazione

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

  •  19-09-2019
  •  | 
  •  

Domanda

Voglio che questo sia impostato in modo che quando un certo corpo del testo viene cliccato, un campo di testo si apre, e l'utente può inserire i dati nel campo, allora o fare clic su un 'salva' o il tasto 'cancella' e sia inviarlo a database o reimpostare il valore, rispettivamente. Tuttavia, nonostante l'utilizzo di 'return false', non riesco neppure a tenere questo codice di attivare ripetutamente.

Ho usato die () e che funziona, ma voglio anche essere in grado di reinstanziare l'evento click originale dopo che l'utente sia salva o annulla, e non riesco a pensare ad un modo per fare quel lavoro. Grazie in anticipo per l'aiuto.

$('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;   
});

Aggiornamento:

Ecco cosa ho finalmente si avvicinò con (include tutto il codice edit-in-place):

$('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);
});

Sono sicuro che è molto più disordinato di qualsiasi cosa avrei potuto scaricato, ma almeno so che le basi di un AJAX edit-in-place ora. Grazie per l'aiuto, tutti.

È stato utile?

Soluzione

Sembra che si sta essenzialmente cercando di fare un accordo edit-in-place. Il problema si sta eseguendo in è che clic dell'utente viene propagata attraverso la casella di testo / estende di nuovo esso è contenitore principale, innescando così ancora una volta l'evento click. È necessario filtrare in modo che non seleziona TD che hanno l'ingresso all'interno del suo contenuto. Qualcosa sulla falsariga di questo:

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

Anche se non è una risposta diretta a quello che stai cercando perché non utilizzare un plugin esistente come uno trovato qui ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top