jQuery Mobile“增强”动态重新生成的html

时间:2012-12-29 23:54:13

标签: javascript jquery-mobile

jQuery Mobile 1.2.0

我使用JavaScript($(selector).html(content))生成HTML,将其添加到DOM然后显示它($.mobile.changePage())。

然后我调用一个AJAX调用,获取一些数据,并重新生成html(但是父元素,同一个$(selector)保持不变,我只是更改它的html(...))。登记/> 在这种情况下,jQM没有“增强”HTML,也没有应用样式。

现在根据docs,我应该简单地在父元素上调用page()函数,即$(selector).page()

文档中的其他位置建议触发create事件,即$(selector).trigger("create")

问题在于上述两种方法都不起作用 - 不应用jQM的样式。

查看jQM的代码,我尝试触发该元素上的pagecreate事件并且确实有效,但是,这在任何地方都没有记录,所以我不确定其中,特别是关于jQM的未来版本。

在文档的某些内容中,我读过我只能在页面上调用page()一次..

无论如何,是否有任何简洁/标准的方式告诉jQM“增强”整个元素及其子元素?或者我应该继续触发pagecreate事件?

谢谢!

2 个答案:

答案 0 :(得分:1)

要创建整个页面,请使用:

$(selector).trigger("pagecreate");

这是我对类似问题的回答:https://stackoverflow.com/a/14011070/1848600。有一个页面娱乐的例子。看一下,这应该可以解决你的问题。

答案 1 :(得分:1)

范围是什么?     $(选择器).trigger( “创建”);

你应该能够在“pageshow”jqm样式应用于元素之前的'pagecreate'事件中添加任何元素。例如,我动态添加这样的页眉/页脚

$(document).on('pagecreate', "[data-role=page]", function() {

var header = "<div data-role='header'>some header stuff</div>";
 var footer= "<div data-role='footer'>some footer stuff</div>";

$(this).prepend(header);
$(this).append(footer);

$("[data-role=header]").fixedtoolbar({tapToggle: false});
$("[data-role=footer]").fixedtoolbar({tapToggle: false});

});

确保你使用的是jquery 1.7或更高版本我认为是在引入on方法的时候;

听起来你可能正在生成DOM然后更改页面,反过来尝试转到页面然后动态编辑dom。

EDIT 将重新加载页面选项设置为true

  $.mobile.changePage($(page), {reloadPage: true});

编辑2

$(selector).children().each(function(){
   $(this).trigger('create');
})