2010-04-14 15 views
1

J'ai du mal à faire en sorte qu'IE7 conserve un événement click lié à un élément ajouté au DOM. charge(). Voici un code:IE 7 ne peut pas lier l'événement (en utilisant .live()) à l'élément créé dynamiquement en utilisant .load()

$('.mybtn').live('click', function(e){ 
    e.preventDefault(); 
    $('#mypage').load('load-this-page.htm'); 
}); 

Et voici le code html

<div id="mypage"> 
    <a href="#" class="mybtn">clickme</a> 
    // stuff goes here 
</div> 

Sur la page charge le clic fonctionne, mais une fois que le div est chargé via le lien ClickMe clic cesse de fonctionner dans IE7. Le lien clickme se trouve dans la commande div on load et aussi dans le fichier html load(), c'est pourquoi j'utilise live().

Ce code fonctionne en FF 3.6, fyi.

Quelqu'un at-il une idée de ce qui se passe (en plus du fait que l'IE aspire les balles)? Merci!

EDIT: voici ce que charge dans la div

<ul> 
    <li> 
     <a href="02-01-2010" id="prev-month" class="mybtn"></a> 
    </li> 
    <li> 
     <h3>March 2010</h3> 
    </li> 
    <li> 
     <a href="04-01-2010" id="next-month" class="mybtn"></a> 
    </li> 
</ul> 

<a href="#">link 1</a> 
<a href="#">link 2</a> 
<a href="#">link 3</a> 
<a href="#">link 4</a> 
+2

Que se passe-t-il exactement dans la réponse à l'appel "load()"? Est-ce un fragment HTML qui inclut la balise '', ou est-ce une page complète (c'est-à-dire, une page commençant par' 'etc)? – Pointy

+0

Pointy -Merci! C'est juste un petit peu de html qui inclut ul, li et quelques liens-y compris ce lien clickme petron

Répondre

1

Essayez ceci:

$('#mypage').load('load-this-page.htm #DivOrWrapper'); 
+0

Simeon - Merci, mais n'est pas votre suggestion pour charger seulement une partie d'une page? Le fichier qui est chargé dans la div n'a que quelques ul, li et quelques liens, dont un pour recharger ce div-sens. – petron

+0

Oui, j'ai suggéré cela au cas où vous chargiez un fichier HTML complet, alors cela résoudrait le problème. Mais si ce n'est pas le cas, puis-je également voir le code de la page que vous chargez? – Simeon

+0

Vous pouvez essayer d'envelopper votre contenu dans un div ou de remplacer * # DivOrWrapper * ci-dessus avec * corps * – Simeon

0

De l'API documentation, la page que vous chargez ("load-ce-page.htm") ne peut pas être un document HTML complet, c'est-à-dire qu'il ne peut pas avoir d'éléments <html>, <title> ou <head>, sinon la compatibilité entre navigateurs n'est pas garantie.

+0

Peter-merci pour la réponse. Non, ce n'est pas un document html complet. C'est un petit extrait de code avec rien mais quelques ul et li et quelques liens.Un des liens devrait recharger ce petit fichier dans la div – petron

0

Peut-être que cela est dû aux restrictions du navigateur IE. Voici une citation de la jQuery Docs:

En raison de restrictions de sécurité du navigateur, la plupart des demandes "Ajax" sont soumises à la same origin policy; la requête ne peut pas extraire des données d'un domaine, d'un sous-domaine ou d'un protocole différent.

Cela signifie que vous ne pouvez pas faire $ charge:

0

Essayez celui-ci:

var fn = function(e) { 

    e.preventDefault(); 
    $('#mypage') 
     .load('load-this-page.htm') 
     .find('.mybtn') 
     .click(fn); 
}; 

$('.mybtn').live('click', fn);