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
事件?
谢谢!
答案 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');
})