2009-02-16 5 views
192

J'essaie de donner un effet de fondu à un div & supprimer div (id = "notification"), quand une image est cliquée.Comment "fadeOut" et "supprimer" un div dans jQuery?

Voilà comment je fais ça:

<a onclick="$("#notification").fadeOut(300,function() { $("#notification").remove(); });" class="notificationClose "><img src="close.png"/></a> 

Cela semble ne pas fonctionner. Que dois-je faire pour résoudre ce problème?

+12

15 votes pour la question et 55 votes pour la réponse ... et c'était clairement juste une faute de frappe ... wtf? –

+4

Maintenant, c'est 34 et 110 :). J'ai atterri ici parce que je ne savais pas comment enlever un élément après l'avoir éteint (vous pouvez deviner: je n'ai pas RTFM). – orique

+3

indépendamment de la faute de frappe, la question apparaît dans les résultats de google et je upvote lorsque je trouve des réponses rapidement. –

Répondre

370

Essayez ceci:

<a onclick='$("#notification").fadeOut(300, function() { $(this).remove(); });' class="notificationClose "><img src="close.png"/></a> 

Je pense que vos guillemets doubles autour du onclick faisaient fonctionner pas. :)

EDIT: Comme indiqué ci-dessous, en ligne javascript est mal et vous devriez probablement prendre cela de la onclick et le déplacer vers le gestionnaire d'événements click() jQuery. C'est ainsi que les enfants cool le font de nos jours.

+3

+1 comment pourrais-je éventuellement ignorer :) –

+22

Vous ne devriez pas utiliser JavaScript inline, car il est difficile de le modifier de manière cohérente. –

+13

Je ne l'admets pas, j'aide juste le gars avec son problème. Parfois je prêche, je me suis juste réveillé et je ne suis pas dans l'ambiance "supplémentaire". Votre poste fait le travail, cependant.:) –

27

Avez-vous essayé?

$("#notification").fadeOut(300, function(){ 
    $(this).remove(); 
}); 

C'est, en utilisant le courant ce contexte pour cibler l'élément dans la fonction intérieure et non l'id. J'utilise ce modèle tout le temps - ça devrait marcher.

78

vous devriez vraiment essayer d'utiliser jQuery dans un fichier séparé, pas en ligne. Voici ce que vous avez besoin:

<a class="notificationClose "><img src="close.png"/></a> 

Et ce en bas de votre page dans <script> balises à tout le moins ou dans un fichier JavaScript externe.

$(".notificationClose").click(function() { 
    $("#notification").fadeOut("normal", function() { 
     $(this).remove(); 
    }); 
}); 
+0

J'ai essayé mais je n'ai pas réussi à le faire fonctionner. Le lien en ligne ci-dessus a fonctionné, et les deux sont pratiquement identiques. Ici c'est ... http://jsfiddle.net/AndyMP/DBrf5/ – Andy

+1

@Andy: tout d'abord vous avez oublié de mettre la bibliothèque à jQuery;) Deuxièmement, si vous l'utilisez sur votre site, vous devez également l'envelopper dans '$ (document) .ready (function() {' et '}); (sur jsFiddle il est onload donc il le fait pour vous) – Nathan

+0

@Nick Berardi, pouvons-nous le faire avec la page vers le bas de défilement? – Super

47

Si vous l'utilisez à plusieurs endroits différents, vous devriez le transformer en un plugin.

jQuery.fn.fadeOutAndRemove = function(speed){ 
    $(this).fadeOut(speed,function(){ 
     $(this).remove(); 
    }) 
} 

Et puis:

// Somewhere in the program code. 
$('div').fadeOutAndRemove('fast'); 
+0

Je regardais juste comment faire ceci, et pour mon but, le "plugin" chemin est meilleur pour moi, merci – harag

-7

Utilisez

.fadeOut(360).delay(400).remove(); 
+3

Cela ne fonctionne pas, la méthode 'remove' est appelée immédiatement après le' fadeOut' –

1

si vous êtes comme moi comming d'une recherche Google et cherche à supprimer un élément HTML avec animation cool, cela pourrait vous aider:

$(document).ready(function() { 
 
    
 
    var $deleteButton = $('.deleteItem'); 
 

 
    $deleteButton.on('click', function(event) { 
 
    
 
     event.preventDefault(); 
 

 
     var $button = $(this); 
 

 
     if(confirm('Are you sure about this ?')) { 
 

 
      var $item = $button.closest('tr.item'); 
 

 
      $item.addClass('removed-item') 
 

 
       .one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function(e) { 
 

 
        $(this).remove(); 
 
      }); 
 
     } 
 
     
 
    }); 
 
    
 
});
/** 
 
* Credit to Sara Soueidan 
 
* @link https://github.com/SaraSoueidan/creative-list-effects/blob/master/css/styles-3.css 
 
*/ 
 

 
.removed-item { 
 
    -webkit-animation: removed-item-animation .8s cubic-bezier(.65,-0.02,.72,.29); 
 
    -o-animation: removed-item-animation .8s cubic-bezier(.65,-0.02,.72,.29); 
 
    animation: removed-item-animation .8s cubic-bezier(.65,-0.02,.72,.29) 
 
} 
 

 
@keyframes removed-item-animation { 
 
    0% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(0); 
 
     -ms-transform: translateX(0); 
 
     -o-transform: translateX(0); 
 
     transform: translateX(0) 
 
    } 
 

 
    30% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(50px); 
 
     -ms-transform: translateX(50px); 
 
     -o-transform: translateX(50px); 
 
     transform: translateX(50px) 
 
    } 
 

 
    80% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(-800px); 
 
     -ms-transform: translateX(-800px); 
 
     -o-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 

 
    100% { 
 
     opacity: 0; 
 
     -webkit-transform: translateX(-800px); 
 
     -ms-transform: translateX(-800px); 
 
     -o-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 
} 
 

 
@-webkit-keyframes removed-item-animation { 
 
    0% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(0); 
 
     transform: translateX(0) 
 
    } 
 

 
    30% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(50px); 
 
     transform: translateX(50px) 
 
    } 
 

 
    80% { 
 
     opacity: 1; 
 
     -webkit-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 

 
    100% { 
 
     opacity: 0; 
 
     -webkit-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 
} 
 

 
@-o-keyframes removed-item-animation { 
 
    0% { 
 
     opacity: 1; 
 
     -o-transform: translateX(0); 
 
     transform: translateX(0) 
 
    } 
 

 
    30% { 
 
     opacity: 1; 
 
     -o-transform: translateX(50px); 
 
     transform: translateX(50px) 
 
    } 
 

 
    80% { 
 
     opacity: 1; 
 
     -o-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 

 
    100% { 
 
     opacity: 0; 
 
     -o-transform: translateX(-800px); 
 
     transform: translateX(-800px) 
 
    } 
 
}
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta charset="utf-8"> 
 
    <meta name="viewport" content="width=device-width"> 
 
    <title>JS Bin</title> 
 
</head> 
 
<body> 
 
    
 
    <table class="table table-striped table-bordered table-hover"> 
 
    <thead> 
 
     <tr> 
 
     <th>id</th> 
 
     <th>firstname</th> 
 
     <th>lastname</th> 
 
     <th>@twitter</th> 
 
     <th>action</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody> 
 
     
 
     <tr class="item"> 
 
     <td>1</td> 
 
     <td>Nour-Eddine</td> 
 
     <td>ECH-CHEBABY</td> 
 
     <th>@__chebaby</th> 
 
     <td><button class="btn btn-danger deleteItem">Delete</button></td> 
 
     </tr> 
 
     
 
     <tr class="item"> 
 
     <td>2</td> 
 
     <td>John</td> 
 
     <td>Doe</td> 
 
     <th>@johndoe</th> 
 
     <td><button class="btn btn-danger deleteItem">Delete</button></td> 
 
     </tr> 
 
     
 
     <tr class="item"> 
 
     <td>3</td> 
 
     <td>Jane</td> 
 
     <td>Doe</td> 
 
     <th>@janedoe</th> 
 
     <td><button class="btn btn-danger deleteItem">Delete</button></td> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
    
 
<script src="https://code.jquery.com/jquery.min.js"></script> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> 
 

 

 
</body> 
 
</html>

Questions connexes