Ich kann nicht ‚return false‘ zu halten .live () von Code Ausbreitung Wiederholung

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

  •  19-09-2019
  •  | 
  •  

Frage

Ich mag diese eingerichtet werden, so dass, wenn ein bestimmte Textkörper angeklickt wird, ein Texteingabefeld erscheint, und der Benutzer kann Daten in das Feld eingeben, dann entweder auf einem ‚Speicher‘ oder ‚Abbrechen‘ -Button und sie entweder in die Datenbank senden oder den Wert zurückgesetzt, respectively. Doch trotz Verwendung von ‚return false‘ Ich kann den Code nicht scheinen, um zu verhindern Aktivierung wiederholt.

Ich habe verwendet die () und das funktioniert, aber ich möchte auch, nachdem der Benutzer die ursprüngliche Click-Ereignis Reinstanziierung können entweder speichert oder wegfällt, und denken, kann nicht von einer Art und Weise, dass die Arbeit zu machen. Vielen Dank im Voraus für die Hilfe.

$('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:

Hier ist, was schließlich kam ich mit (beinhaltet alle Edit-in-Place-Code):

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

Ich bin sicher, dass es viel chaotischer als alles, was ich heruntergeladen haben könnte, aber zumindest weiß ich, die Grundlagen eines AJAX edit-in-place jetzt. Danke für die Hilfe, die alle.

War es hilfreich?

Lösung

Es sieht aus wie Sie im Wesentlichen sind versucht, ein edit-in-place viel zu tun. Das Problem, das Sie in laufen ist, dass der Klick des Benutzers wird durch das Textfeld ausbreitet / Spannweiten, um es der übergeordneten Container zurück, damit wieder das Click-Ereignis ausgelöst wird. Sie müssen es filtern, so dass es nicht TDs wählen, die die Eingabe innerhalb des zusammen Inhalt haben. Etwas nach dem Vorbild dieser:

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

Auch wenn keine direkte Antwort auf das, was Sie suchen, warum nicht ein vorhandenes Plugin wie man verwenden hier gefunden ?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top