2015-03-26 4 views
1

S'il vous plaît lire cette première partie:
Transforme mon problème était que quelqu'un a utilisé onclick="some javascript", que tous mes bouchons d'événements n'a pas pris.Unbind tous les événements du contenu qui est ajouté dynamiquement via AJAX

Je n'ai trouvé aucune information à ce sujet, devrait-il s'agir d'un article wiki communautaire?


J'ai le contenu qui a dynamiquement du contenu chargé, où je veux délie événements:

Exemple de code sur initialisation:

<div id="Wrap"></div> 

Exemple de code après chargement du contenu via AJAX :

<div id="Wrap"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 

Ce que je veux:

  • Le .item peut avoir un événement
  • L'élément est chargé dynamiquement via AJAX
  • Il doit délier tous les événements, et le remplacer par un (< - c'est pas de problème)

Ce que je:

$(document).ready(handleWriteDisableds); 

$(window).load(handleWriteDisableds); // in doc ready 

$(document).ajaxComplete(handleWriteDisableds); 


function handleWriteDisableds(){ 
    $('.item').unbind() // remove all events set in doc-ready 

    $(document).on('click', '.item', function(e){ 
     e.preventDefault(); // prevent default behaviour 
     e.stopPropagation(); // Don't bubble up 
     alert('no can do'); 
     return false; // hardcore stopping stuff 
    }); 
} 

Ce que je besoin:
Pour UNBIND TOUT après le chargement dynamique.

Édition Oh, Il s'avère que nous avons quelqu'un qui a utilisé l'attribut onclick, ceux-ci ne s'arrêtent pas apparemment. Je vais mettre à jour si j'ai plus d'informations

+0

alors quel est le problème? n'êtes-vous pas capable de délier tous les événements? –

+0

Si vous utilisez la délégation, vous devez dissocier l'élément parent sur lequel vous avez défini la délégation. –

+0

J'ai ajouté un peu plus de code à mon exemple. Les événements ne se déconnectent pas – Martijn

Répondre

2

Essayez la fonction jQuery off() pour supprimer l'événement attaché à l'élément ajouté dynamiquement. jQuery off()

Ajoutez ceci dans le rappel de succès ajax.

$('.item').off(); // with no arguments removes all handlers attached to the elements. 
+0

Qu'est-ce que je ne comprends pas, pourquoi aurait-il besoin de supprimer les événements juste au début, lorsque le document est prêt, alors qu'aucun événement n'a encore été lié? –

+0

Cela ne fonctionnera pas pour le contenu dynamique. – Martijn

+0

Et off est à peu près le même que unbind;) – Martijn

2

Essayez ceci. Il pourrait vous aider avec cette solution rapide. Il va délier tous les événements.


EDIT:

Dynamiquement articles ajoutés pas le gestionnaire - i.e., dans votre cas, le nouvellement ajouté DOM ayant « .item » ne fonctionnera pas à moins que vous REBIND le gestionnaire. Donc, si vous ajoutez dynamiquement du contenu (via AJAX), alors comment votre contenu dynamique obtient-il un gestionnaire attaché avec lui?

Vous devez comprendre comment il devient gestionnaire pour les contenus dynamiques.

Par défaut, le contenu ajouté dynamiquement n'a aucun gestionnaire lié à celui-ci.


$(function() { 
 

 
    $(document).on('click', '.item', function(e) { 
 
    e.unbind(); 
 
    alert('no can do') 
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="Wrap"> 
 
    <div class="item">Dynamic Content 1</div> 
 
    <div class="item">Dynamic Content 2</div> 
 
    <div class="item">Dynamic Content 3</div> 
 
</div>

+0

+1, Ceci est une technique que je n'ai cependant pas sur, bien. Je crois que mon problème se situe ailleurs, je vais mettre à jour ma réponse – Martijn