Question

Je suis en train d'essayer de cacher une ligne de tableau dynamique créée après un bouton a été pressé. Jusqu'à présent, je suis parvenu à gérer une partie des fonctions dynamiques.

Chaque ligne dynamique a un « Annuler » et le bouton « Enregistrer », j'ai réussi à répondre à ces derniers avec facilité. Mon problème est en fait de travailler avec la ligne elle-même.

$(function() {
    $(".add").click(function(){
        // Just append to the table
        $("table#bookmarks tr:first").after("<tr class='new' id='<?php echo rand(1, 9999); ?>'><td></td><td><b>URL:</b> <input type='text' id='newURL' /><br /><b>Title:</b> <input type='text' id='newTitle' /><br /><b>Description:</b><br /><textarea id='newDesc'></textarea></td><td><b>Tags:</b> <input type='text' id='newTags' /></td><td><a href='#' class='save'>Save</a><br /><a href='#' class='cancel'>Cancel</a></td></tr>");
        $('span#links').html('<i style="color: #FF0000">You must reload to recount links!</i>');
        // Actually, the user doesn't want to add another link
        $('.cancel').click(function() {
            $(this).parents(".new").animate({ backgroundColor: "#FF0000" }, "fast").animate({ opacity: "hide" }, "slow");
        });
        // Seems the user wants to add a link!
        $('.save').click(function() {
            $("table#bookmarks tr.new #id").animate({ backgroundColor: "#FFFFFF" }, "fast").animate({ opacity: "hide" }, "slow");
        });
    });

});

J'ai besoin de se cacher maintenant la ligne, j'ai essayé toutes sortes de méthodes diverses, .parent, .attr pour ne citer que quelques-uns.

Était-ce utile?

La solution

Essayez enchaînant vos fonctions jQuery comme ceci:

$(function() {
    $(".add").click(function() {
        $("<tr class='new'><td></td><td><b>URL:</b> <input type='text' id='newURL' /><br /><b>Title:</b> <input type='text' id='newTitle' /><br /><b>Description:</b><br /><textarea id='newDesc'></textarea></td><td><b>Tags:</b> <input type='text' id='newTags' /></td></tr>")
            .append($("<td></td>")
                .append($("<a href='#'>Save</a><br/>")
                    .click(function() { $(this).parents(".new").animate({ backgroundColor: "#FF0000" }, "fast").animate({ opacity: "hide" }, "slow"); }))
                .append($("<a href='#'>Cancel</a>")
                    .click(function() { $(this).parents(".new").animate({ backgroundColor: "#FF0000" }, "fast").animate({ opacity: "hide" }, "slow"); })))
            .insertAfter($("table#bookmarks tr:first"));
            $('span#links').html('<i style="color: #FF0000">You must reload to recount links!</i>');
    });
});

(Ceci est une version modifiée de votre code d'origine de sorte qu'il est encore un peu en désordre.)

Autres conseils

Vous pouvez utiliser jQuery vivre, nouveau depuis jQuery 1.3.2, pour préserver la fonction de clic sur un élément créé dynamiquement.

http://docs.jquery.com/Events/live

Je jetai ensemble un exemple rapide, mais je dois admettre que je suis un peu rouillé sur jQuery. Ce code ne porte toutefois le travail, au moins pour moi.

$(function() {
$(".add").click(function(){
    var save = $("<a href='#' class='save'>Save</a>").click(function() {
        $(this).parent().animate({ backgroundColor: "#FFFFFF" }, "fast").animate({ opacity: "hide" }, "slow")
    })

    var cancel = $("<a href='#' class='cancel'>Cancel</a>").click(function() {
        $(this).parent().animate({ backgroundColor: "#FFFFFF" }, "fast").animate({ opacity: "hide" }, "slow")
    })

    var buttonTD = $("<td></td>");
    buttonTD.append(save);
    buttonTD.append(cancel);

    var row = $("<tr class='new' id='<?php echo rand(1, 9999); ?>'><td></td><td><b>URL:</b> <input type='text' id='newURL' /><br /><b>Title:</b> <input type='text' id='newTitle' /><br /><b>Description:</b><br /><textarea id='newDesc'></textarea></td><td><b>Tags:</b> <input type='text' id='newTags' /></td></tr>")
    .append(buttonTD);
});

});

La fonction en direct jQuery:

$("#sendmail").live("click", function(){

    // your code goes here  


});

ici est un exemple de la façon dont je l'ai utilisé.

$("#sendmail").live("click", function(){

    $("#emailres").html('<img src="../images/ajax-loader.gif">');
    var youremail = $("#youremail").val();
    var subject = $("#subject").val();
    var message = $("#message").val();

    $.ajax({
    type: 'post',
    url: 'email.php',
    data: 'youremail=' + youremail + '&subject=' + subject + '&message=' + message,

    success: function(results) {
        $('#emailres').html(results);
        }
    }); // end ajax 

});

Pour masquer la ligne sélectionnée, faire quelque chose comme ceci:

d'abord donner votre table un identifiant (quelque chose comme #mytable)

$("#cancel_row").live("click", function(){

    $(this).$("#mytable tr").hide();

});

espoir que vous aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top