Charger un fichier d'amorce liste du contenu avec l'AJAX. Est-ce possible?
Approprié des bribes de ce que j'ai essayé sont ici:
<a href="#" data-content="<div id='my_popover'></div>"> Click here </a>
$(".button").popover({html: true})
$(".button").click(function(){
$(this).popover('show');
$("#my_popover").load('my_stuff')
})
Quand je clique, je vois la demande se fait, mais ne pas remplir la liste. Je n'ai même pas voir HTML pour la liste s'ajoutent les DOM, mais qui pourrait être de firebug.
Quelqu'un a déjà essayé ça?
- Je n'ai pas travaillé avec bootstrap, mais j'imagine qu'il est possible que l'élément n'existe pas lorsque vous essayez d'ajouter du contenu, mais c'est une supposition. En êtes-vous des erreurs de javascript?
- Si vous avez plusieurs popovers et que vous voulez charger un contenu différent pour chaque liste, puis cette réponse est très soignée et permet de conserver beaucoup de la sortie de la boîte de configuration pour les popovers - tout ce que vous devez faire est de stocker l'ID de la liste des attributs du lien, et de les lire dans l'
'shown.bs.popover'
gestionnaire: stackoverflow.com/a/39028723/1371408
Vous devez vous connecter pour publier un commentaire.
Voir mon blog pour la solution de travail: https://medium.com/cagataygurturk/load-a-bootstrap-popover-content-with-ajax-8a95cd34f6a4
html
propriététrue
, puis définissez lacontent
propriété à une balise HTML iframe, commecontent: '<iframe src="http://www.google.com"></iframe>'
. Vous aurez également besoin de remplacer lamax-width
propriété de votre liste à l'aide de CSS, et probablement supprimer le style de l'iframe à l'aide de CSS ainsi..on
la méthode/de l'e.off('hover')
méthode.hover()
au lieu debind()
. En outre, nie.unbind('hover')
nie.off('hover')
a fonctionné pour moi pour mouseleave. au lieu de cela, j'ai dû suivre le.hover( handlerIn, handlerOut )
format décrit dans le jquery docs ici. plus précisément, j'ai ajouté le code suivant à la fin de ma méthode:, function() { var e = $( this ); e.popover( 'hide' ) }
// hover (in,out) handler for remote content $('.remotepreview').hover(function() { var e = $(this); var container = $(this).attr('data-rel'); // the container with content to show e.off('hover'); $.get(e.data('remotecontent'), function(data) { var content = $(data).find(container); e.popover({content: content}).popover('show'); }); }, function() { $(this).popover('hide'); });
Fonctionne bien pour moi:
<br/>
au besoin aprèsLoading...
à adapter le contenu et d'apporter de l'alignement du dos.La lecture de toutes ces solutions, je pense que la solution devient beaucoup plus simple si vous utilisez un synchrone appel ajax. Vous pouvez ensuite utiliser quelque chose comme:
async: false
tue c'est pour moiJ'ai mis à jour la réponse la plus populaire. Mais dans le cas de mes modifications ne seront pas approuvés j'ai mis ici une réponse distincte.
Différences sont les suivantes:
Il faut d'abord ajouter un poload attribut pour les éléments vous
comme pour ajouter un pop sur. Le contenu de cet attribut doit être le
url à charger (absolue ou relative):
Et en JavaScript, de préférence dans un $(document).prêt();
off('hover')
empêche le chargement de données plus d'une fois etpopover()
lieune nouvelle hover événement. Si vous voulez que les données soient actualisées à chaque hover
cas, vous devez supprimer le off.
Veuillez voir le travail JSFiddle de l'exemple.
Une variation du code de Çağatay Gürtürk, vous pouvez utiliser la fonction de délégué à la place et la force de cacher la liste sur hoverout.
La solution de Çağatay Gürtürk est gentil, mais j'ai vécu la même étrangeté décrit par Luc de L'Obscur:
Lors de l'ajax chargement dure trop longtemps (ou les événements de la souris sont trop rapides), nous avons une .liste('show') et pas de .liste('hide') sur un élément donné causant la liste de rester ouvert.
J'ai préféré ce massif des pré-charge de la solution, toutes les fenêtre pop-over-contenu est chargé et les événements sont gérés par bootstrap comme en normal (statique) popovers.
Une autre solution:
L'idée ici est de déclencher manuellement l'affichage de la Liste avec mouseenter & mouseleave événements.
Sur mouseenter, si il n'y a pas de Liste de la création de votre article (if($(this).de données('liste') == null)), créez-la. Ce qui est intéressant, c'est que vous pouvez définir votre propre Liste de contenu en le passant comme argument (modèle) à la liste() fonction. Ne pas oublier de mettre le html paramètre vrai aussi.
Ici, je viens de créer un caché modèle appelé popovertemplate et le clone avec JQuery. N'oubliez pas de supprimer l'attribut id une fois que vous le clone sinon vous vous retrouverez avec dupliqué id dans les DOM. Notez également que style="display: none" pour masquer le modèle dans la page.
Après l'étape de création (ou si elle a déjà été créé), il vous suffit d'afficher la liste avec $(this).liste('show');
Classiques appel Ajax. Sur le succès, vous avez besoin de à nettoyer la vieille liste du contenu avant de mettre de nouvelles données à partir du serveur. Comment peut-on obtenir la liste actuelle de contenu ? Avec le .liste.dans sélecteur de! Le .dans classe indique que la liste est affichée, c'est le truc ici!
Pour finir, sur mouseleave événement, il suffit de masquer la liste.
EN 2015, c'est la meilleure réponse
Si le contenu de la liste n'est pas susceptible de changer, il serait judicieux de le récupérer qu'une seule fois. Aussi, certaines solutions ont, ici, la question que si vous vous déplacez sur de multiples "aperçus" rapide, vous obtenez de multiples ouvrir des popups.
Cette solution répond à la fois à ces choses.
Je pense que ma solution est plus simple avec des fonctionnalités par défaut.
http://jsfiddle.net/salt/wbpb0zoy/1/
JS:
HTML:
Voici ma solution qui fonctionne très bien avec ajax chargé de contenu trop.
J'ai essayé la solution par Çağatay Gürtürk, mais a obtenu la même étrangeté, comme Luc l'Obscur. Ensuite essayé la solution par l'Aas Kusuma. Cela fonctionne, mais je crois qu'il ne l'Ajax lire chaque temps la liste est affichée. L'appel à unbind('hover') n'a aucun effet. C'est parce que délégué pour la surveillance des événements dans une classe spécifique -- mais cette classe est inchangé.
Voici ma solution, en étroite collaboration basée sur l'Aas Kusuma de l'. Changements:
delegate
avecon
pour correspondre à de nouvelles bibliothèques JQuery.J'ai essayé quelques suggestions ici et je voudrais vous présenter la mienne (qui est un peu différent) - j'espère que ça aidera quelqu'un. Je voulais afficher la popup sur le premier clic et de le cacher sur le deuxième clic (avec bien sûr la mise à jour de données à chaque fois).
J'ai utilisé une variable supplémentaire
visable
de savoir si la liste est visible ou non.Voici mon code:
HTML:
Javascript:
Cheers!
une réponse similaire à ce qui a été donné dans ce fil: Réglage des données-contenu et l'affichage de liste - c'est une façon de meilleure façon de faire ce que vous espérez atteindre. Sinon, vous devrez utiliser le live: true option dans les options de la liste de la méthode. Espérons que cela aide
noter que j'ai utilisé le même href de la balise et fait en sorte qu'il n'a pas changer de page quand on clique dessus, c'est une bonne chose pour le RÉFÉRENCEMENT et également si l'utilisateur n'a pas javascript!
J'aime Çağatay de la solution, mais je les fenêtres pop-up n'ont pas à se cacher sur mouseout. J'ai ajouté cette fonctionnalité supplémentaire avec ceci:
J'ai utilisé la solution d'origine, mais fait quelques changements:
Tout d'abord, j'ai utilisé
getJSON()
au lieu deget()
parce que j'était en train de charger un script json. Ensuite, j'ai ajouté le déclencheur du comportement de pointer pour fixer le collant pop plus de problème.J'ai ajouté html: c'est vrai, il n'apparaît pas du html brut, de sortie, dans le cas où vous voulez le format de vos résultats. Vous pouvez également ajouter plus de contrôles.
Affichage ajax liste statique de l'élément avec hover déclencheur:
Html :
Ajax le contenu est chargé une fois! voir
el.data('bs.popover').options.content = response;
Je l'ai fait et c'est un travail parfait avec ajax et le chargement sur la liste du contenu.
Vous pouvez le vérifier http://kienthuchoidap.com. Aller et passez de nom d'utilisateur de l'utilisateur.
Pour moi de travaux changement de données-contenu befora charge liste:
Cela fonctionne pour moi, ce correctif de code possibles problèmes d'alignement:
Juste au cas où, le point que je suis en utilisant retourne html (rails partielle)
J'ai pris une partie du code à partir d'ici https://stackoverflow.com/a/13565154/3984542
Voici une manière qui réponde à quelques questions:
._popper.update()
, qui recalcule la position de la liste.max-width
).popover._popper.update()
et assurez-vous quepopover
,_popper
etupdate
tous ont les valeurs attendues. Il est certainement possible que ceux-ci ont changé.