2010-05-20 3 views
0

J'essaie de redresser un script pour une fenêtre contextuelle de notification. Je ne veux pas que le popup disparaisse après X secondes ou fadeout lorsque l'utilisateur clique sur le message. Je peux obtenir les deux effets individuellement, mais quand j'essaie de les combiner, fadeOut fonctionne. Ceci est mon code à ce jour:In jquery Définissez un délai pour le fondu sortant ou le fondu sortant dès que vous cliquez sur

function notify(data, type) { 
switch(type) { 
case "success": 
    $('#notify').html(data) 
    .removeAttr("style") 
    .addClass('notifySuccess') 
    .click(function() { 
$("#notify").fadeOut(); 
    }) 
    .delay(5000).fadeOut(); 
break; 
case "error": 
    $('#notify').html(data) 
    .removeAttr("style") 
    .addClass('notifyFailure') 
    .click(function() { 
$("#notify").fadeOut(); 
    }) 
    .delay(5000).fadeOut(); 
break; 
} 
} 

Répondre

1

Vous avez besoin d'un .stop() là pour effacer le retard de la file d'attente, comme ceci:

function notify(data, type) { 
switch(type) { 
case "success": 
    $('#notify').html(data) 
    .removeAttr("style") 
    .addClass('notifySuccess') 
    .click(function() { 
    $("#notify").stop(true, true).fadeOut(); 
    }) 
    .delay(5000).fadeOut(); 
break; 
case "error": 
    $('#notify').html(data) 
    .removeAttr("style") 
    .addClass('notifyFailure') 
    .click(function() { 
    $("#notify").stop(true, true).fadeOut(); 
    }) 
    .delay(5000).fadeOut(); 
break; 
} 
} 

En outre, si vous avez seulement success et error pour les types , vous pouvez réduire cela beaucoup, comme ceci:

function notify(data, type) { 
$('#notify').html(data) 
    .removeAttr("style") 
    .addClass(type == 'success' ? 'notifySuccess' : 'notifyFailure') 
    .delay(5000).fadeOut() 
    .click(function() { 
    $(this).stop(true, true).fadeOut(); 
    }); 
} 
+0

+1, principalement pour le refactoring :-) –

+0

Merci beaucoup !!! Cela a fait exactement ce que je voulais. Je vais couper le code aussi comme vous l'avez suggéré, encore merci beaucoup! – JClu

0

essayez de mettre .stop();

.click(function() { 
    $("#notify").stop(true,true).fadeOut(); // also in this part, you may change $("#notify") to $(this) 
}) 
Questions connexes