2010-11-27 5 views
0

Je charge du contenu en utilisant ajax à partir de fichiers HTML externes. Ne sachez pas pourquoi après le chargement du contenu, l'événement click ne fonctionne pas en safari (safari mobile) sur aucun des éléments nouvellement chargés (ul, li, images, etc.). Cependant, cela fonctionne dans mozilla.L'événement Click ne fonctionne pas sur le contenu Ajax chargé

Je ne suis pas en mesure de comprendre la question exacte derrière tout cela. Veuillez me conseiller la solution. Voici le code de référence.

Note: J'utilise le code ci-dessous en fonction prêt jquery. Est-ce que jquery est la cause de l'issue ??

var currentBottle = this.title; var request = createRequest(); if (request == null) { alert ("Impossible de créer la requête"); retour; } request.onreadystatechange = showContent; request.open ("GET", currentBottle + ".html", true); request.send (null); { if (request.readyState == 4) { if (request.status == 200) { document.getElementById ("food_scroller") innerHTML = request.responseText

fonction showContent(). }} }

+0

Est-ce un doublon? http://stackoverflow.com/questions/16598213/how-to-bind-events-on-ajax-loaded-content – Nikkorian

Répondre

2

Dans Safari le type de contenu peut parfois la matière, assurez-vous que le type de réponse est défini comme text/html. Aussi dans votre contenu AJAX chargé, vous devriez essayer de ne pas avoir de balises <script> Je ne pense pas que Safari les respecte parfois.

Peut-être essayer d'utiliser jQuery de $.load() pour obtenir le contenu HTML compatible cross-browser (ci-dessous correspond à votre createRequest et fonctions showContent):

var currentBottle = this.title; 
$.load(currentBottle + ".html", 
    function(responseText,textStatus,XMLHttpRequest){ 
     $("#food_scroller").html(responseText); 
     //bind you on click events here 
     $("#food_scroller").find("ul, li, images").click(myClickFunction); 
    } 
); 
+1

+1 Votre contenu chargé ne devrait pas avoir '

0

Je suis passé par cette question moi-même. Le html nouvellement chargé via Ajax doit être connecté aux gestionnaires d'événements, même s'il remplace des éléments DOM existants. Pour ce faire, vous devez inclure dans votre résultat AJAX pour établir un gestionnaire pour tous les éléments sensibles aux événements qui sont rendus.

Ainsi, par exemple, si votre appel AJAX retourne

$ajaxresult = '<button class="bookbtn" id="bookbtn" type="button" >Book</button>'; 

Vous devez ajouter

$ajaxresult .= '<script>$("#bookbtn").on("click",function(){doit($(this))});</script>'."\n"; 

Cependant la réponse à cette question tout à l'heure, je lis ce qui suit dans http://api.jquery.com/on/:

Les gestionnaires d'événements sont liés uniquement aux éléments actuellement sélectionnés; ils doivent exister au moment où votre code appelle .on(). Pour assurer les éléments sont présents et peuvent être sélectionnés, place des scripts après les éléments dans le balisage HTML ou effectuer événement de liaison dans un document gestionnaire prêt. Vous pouvez également utiliser des événements délégués pour attacher des gestionnaires d'événement .

Les événements délégués présentent l'avantage de pouvoir traiter les événements de éléments descendants qui seront ajoutés au document ultérieurement.Par en sélectionnant un élément qui est garanti être présent au moment où le gestionnaire d'événements délégué est attaché, vous pouvez utiliser des événements délégués à pour éviter d'avoir à attacher et à supprimer fréquemment des gestionnaires d'événements. Cet élément peut être l'élément conteneur d'une vue dans une conception Modèle-Vue-Contrôleur , par exemple, ou documenter si le gestionnaire d'événements souhaite surveiller tous les événements de formation de bulles dans le document. L'élément de document est disponible dans la tête du document avant le chargement tout autre HTML, il est sûr de joindre il y a des événements sans attendant que le document soit prêt.

En plus de leur capacité à gérer les événements sur les éléments descendants pas encore créé, un autre avantage d'événements délégués est leur potentiel pour les frais généraux beaucoup plus bas lorsque de nombreux éléments doivent être surveillés . Sur une table de données avec 1 000 lignes dans son tbody, cet exemple attache un gestionnaire à 1 000 éléments: ...

Questions connexes