jQuery Mobile n'applique pas de styles après l'ajout dynamique de contenu

je sais que ces questions apparaissent à plusieurs endroits ( forçant jQuery Mobile à réévaluer les styles/thèmes sur le contenu dynamiquement inséré ) mais pas avec une réponse qui fonctionne pour moi.

je charge du contenu en utilisant ajax, et en l'insérant dans un div comme ceci:

       $.ajax({
            url: "../Services/CalendarService.cshtml?service=true",
            cache: false,
            success: function (data) {

                data = $.parseJSON(data);
                var s = $("#user_tmpl").html();
                var s1 = tmpl(s, data);

                $("#target").html(s1);
                $("#targetRefresh").page();
            }
        });

j'ai essayé de définir le targetRefresh à la fois sur la cible à laquelle j'ajoute le html, et sur la page, mais sans succès. Le conent est inséré, mais le style n'est pas appliqué.

j'ai aussi essayé

.trigger("enhance")

une idée de ce qu'il faut faire?

le html qui a inséré sont un tas de ceux-ci:

<div data-theme="e" data-collapsed="true" data-role="collapsible">         <h3>MyOwner2AA</h3>         <p>MyDescription</p>         <p>/Date(1320339836735)/</p>         <p>MyOwner</p>         <i></i>     </div>

Merci pour toute aide

Larsi

42
demandé sur Community 2011-11-03 21:39:54

4 réponses

essayez d'appeler .trigger("create") sur l'élément avec le nouveau contenu.

selon le jQuery Mobile docs , "l'événement create est adapté pour améliorer la marge brute qui contient un ou plusieurs widgets."

EDIT : à partir de jQuery Mobile 1.4, .trigger('create') est déprécié , et vous devez utiliser .enhanceWithin() à la place. (Merci à John Mc pour le tuyau.)

92
répondu Phil 2015-01-13 19:18:31

cela a fonctionné pour moi pour la vue de liste

$('ul').listview('refresh');

vous pouvez aussi rafraîchir le repliable

$('#element').collapsibleset('refresh')
33
répondu Sagar Gala 2012-12-06 18:50:10

quand j'ai essayé les solutions ci-dessus, j'ai reçu un message d'erreur dans Firebug

exception non tirée: impossible d'appeler les méthodes listview avant l'initialisation; tentative d'appeler la méthode 'refresh '

j'ai trouvé une solution pour cela cependant, au lieu d'appeler .trigger("create") après l'ajout des nouveaux éléments que j'ai appelé

$("ul").listview();

à la fin de la fonction de rappel ajax.

Cela fait tout fonctionne parfaitement pour moi. Espérons que cela aide.

5
répondu Christopher Käck 2012-07-17 21:18:34

pour ceux qui l'ont manqué ci-dessus, pour appliquer de nouveau les styles JQM après avoir ajouté du contenu de façon dynamique, faites ceci:

$('.myelement').html( myHtmlStr ).enhanceWithin();
4
répondu MannyC 2015-05-01 15:30:36