2010-08-24 5 views
1

J'ai un événement attaché à un élément div qui va supprimer l'élément onclick. J'ai aussi un événement en direct jQuery que je joins au même élément comme si,Après avoir supprimé un élément, IE ne déclenche pas d'autres événements, les autres navigateurs

$("#divEle").live('click', function() { 
    alert($(this).html()); 
}); 

Dans FF, cet événement est exécutée. Mais dans IE8, le premier événement supprime l'élément et l'événement en direct n'a jamais lieu. Je suppose que cela a à voir avec la façon dont les navigateurs font flamber les événements, mais je dois trouver un moyen d'organiser ces deux événements.

Voici un petit exemple du code, et peu importe l'événement en premier. J'ai essayé les deux. Je suppose que c'est parce que le live nécessite la propagation, et que le clic ne l'est pas.

$(function() { 
    $("#myele").live('click', function() { 
     alert('works in ff'); 
    }); 

    $("#myele").click(function() { 
     $("#myele").remove(); 
    }); 
}); 

Merci pour toute aide!
Metropolis

MISE À JOUR

Désolé, j'oublié quelque chose. L'élément est supprimé en utilisant une fonction plugin. J'ai donc besoin des fonctions pour travailler ensemble séparément.

+0

L'événement "click" doit-il être "live"? ou pouvez-vous le changer en un '.click (fonction()' ... –

+0

Besoins d'être en direct .... c'est ce qui suce .... – Metropolis

+0

Une autre question, avez-vous essayé d'utiliser .delegate() au lieu de .live ? Pour expliquer, le .delegate() n'attache pas de la même manière, donc il devrait toujours être présent (l'événement) même si l'élément a été supprimé (en théorie au bail) –

Répondre

1

Gecko supporte le haut/bas bouillonnement, mais IE ne supporte que jusqu'à bouillonnement. Vous pourriez avoir besoin d'appeler ce qui suit sur l'événement supprimer:

event.stopPropagation (pour gecko)
window.event.cancelBubble = true (ie)

est ici une solution plus complète:

function doSomething(e) 
{ 
    if (!e) var e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 
} 

Lire http://www.quirksmode.org/js/events_order.html pour plus d'informations

Voici un lien plus précis de ce que l'auteur cherchait: http://www.bennadel.com/blog/1822-Learning-jQuery-1-4-Remove-vs-Detach-.htm

+0

Désolé, il se peut que vous ayez mal compris, il suffit de relire votre message, avez-vous dit que vous supprimez tout l'élément? J'étais sous l'impression que vous supprimiez uniquement l'événement. une réponse précise sans voir la suppression de l'événement –

+0

Voici une meilleure ressource si vous parlez de supprimer un élément qui ajoute un gestionnaire de clic .live après l'enlever. http://www.bennadel.com/blog/1822-Learning-jQuery-1-4-Remove-vs-Detach-.htm –

+0

Oui, ce lien est exactement ce dont j'avais besoin. Merci! Pouvez-vous faire de ceci votre réponse afin que la réponse correcte soit plus claire s'il vous plaît. – Metropolis

0

Pourquoi ne pas simplement attacher un événement qui fera ce que vous avez besoin de faire, puis supprimer l'élément?

Comme si:

$("#divEle").live('click', function() { 
    // do stuff that you want to do first 

    // remove the element 
}); 
+0

Voir ma mise à jour question – Metropolis

0

je fait quelques tests de cela et ne pouvait pas se reproduire: http://jsfiddle.net/LdqyG/

Je suppose que je dois quelques détails sur le plug-in et comment il supprime l'élément.

Questions connexes