2012-11-01 1 views
0

J'ai simple Shadowbox qui est appelé par jquery:Appel Jquery à l'intérieur/à l'intérieur d'un Shadowbox

$('#statsButton').click(function() { 
    thisContent = $('#userStats').html(); 
    Shadowbox.open({ 
     content: thisContent, 
     player: "html" 
    }); 
}); 

j'ai une div, dans cet objet $('#userStats') qui devrait alerter sur un clic:

$("#submitPosition").click(function(e) { 
     alert('test'); 
}); 

Mais quand je clique, rien ne se passe. Les deux fonctions ci-dessus sont enveloppées dans leurs propres blocs de document prêt. J'appelle le Shadowbox.init au début du script et ça marche très bien. C'est juste qu'il ignore les événements jQuery à l'intérieur. Quelqu'un peut-il aider?

Bref récapitulatif: Fondamentalement, j'ai Shadowbox et lecteur HTML. Je veux que jQuery agisse comme prévu dans ce lecteur HTML.

Répondre

2

Si vous chargez un contenu dynamique dans un conteneur, vous devez utiliser jQuery on() pour lier les événements à des objets à l'intérieur du contenu, car en utilisant click() ne se lie l'événement à la #submitPosition existante.

Par exemple:

$('body').on('click', '#submitPosition', function(e) { 
    alert('test'); 
}); 

Aussi, en utilisant plusieurs éléments sur une page avec le même identifiant est pas une bonne pratique.

http://api.jquery.com/on/

+0

Il n'y a pas d'abord plusieurs éléments avec le même identifiant, mais une fois que le contenu de la div #userStats est chargé dans le Shadowbox, il y aura deux cas de #submitPosition (dans #userStats et Shadowbox). Juste quelque chose à l'esprit! –

+0

J'ai changé cela à la bonne réponse pour deux raisons: 1. vivre est déprécié et sur est la jquery correcte à utiliser 2. l'affiche mentionné que l'id est dupliqué et c'était très vrai (en fait, si vrai que quand j'ai essayé pour le modifier par une réponse ajax, il a échoué, tout ce qui est dans la shadowbox doit toujours être une classe) – illathruz

2

Essayez ceci:

$(document).ready(function(){  
    $("#submitPosition").live('click',function(e) { 
      alert('test'); 
    }); 
}); 

Cela vous aidera. Bcoz lorsque ce code initialise le temps #submitPosition n'est pas là en html. Mais en direct permettra de résoudre ce problème.

0

Je vois 2 options:

1) Dans votre userstat div, passez à:

$("#submitPosition").click(function(e) { 
    alert('test'); 
}).click(); 

qui fait appel à votre fonction de rappel.

2) Utilisez l'événement onOpen de shadowbox:

$('#statsButton').click(function() { 
    thisContent = $('#userStats').html(); 
    Shadowbox.open({ 
     content: thisContent, 
     player: "html", 
     onOpen: function(){ alert('test'); } 
    }); 
});