Javascript Can';t从pageshow函数修改innerHTML
我正在制作一个JQuery移动web应用程序,遇到了一个有趣的问题。我试图从Javascript Can';t从pageshow函数修改innerHTML,javascript,jquery,html,jquery-mobile,Javascript,Jquery,Html,Jquery Mobile,我正在制作一个JQuery移动web应用程序,遇到了一个有趣的问题。我试图从pageshow函数中动态注入页面内容。我知道正在调用pageshow函数,因为console.log打印正确,但是,测试HTML不会出现在页面中 页面显示功能的代码: for(var i = 0; i < landmarkList.length; i++) { var pageId = landmarkList[i].landmarkLink.substring(1, landmarkList[i].la
pageshow
函数中动态注入页面内容。我知道正在调用pageshow
函数,因为console.log
打印正确,但是,测试HTML不会出现在页面中
页面显示功能的代码:
for(var i = 0; i < landmarkList.length; i++)
{
var pageId = landmarkList[i].landmarkLink.substring(1, landmarkList[i].landmarkLink.length);
$(document).on('pageshow','#' + pageId,function(){
console.log("Init Map for page: " + pageId);
document.getElementById("map_" + pageId).innerHTML = 'TEST';
});
}
for(变量i=0;i
以下是一个例子:
. 单击一行时,会加载pageShow
函数,但innerHTML不会添加到div
,也不会产生错误
你知道为什么不会发生这种情况吗
谢谢。您误用了委托事件处理程序(它不是为每个元素设计的)。如果可以从页面提取页面id,则根本不需要循环
基本上,循环中的pageId
值在点击此行时不再有效(因为它在循环修改该值很久之后被回调):
如果您能提供一个HTML示例,我将使其准确无误,但类似于:
// e.g. Match pageShow events from any pages with data-role=
$(document).on('pageshow','[data-role=page]', function(){
var $page = $(this);
// Extract the page id from the page element (pageId is locally scoped to this callback)
var pageId = $page.attr('id');
console.log("Init Map for page: " + pageId);
$("#map_" + pageId).html('TEST');
});
地图和页面之间很可能存在某种关系,但如果没有HTML,很难提供更好的选择器
更新:
查看实际的页面HTML,每个“页面”都有一个data role=“page”
属性。这应该是委派事件选择器的目标。然后,您可以从该页面获取id,在其前面加上“map_u2;”,并直接找到匹配的地图
可缩短为:
// e.g. Match pageShow events from any pages with data-role=
$(document).on('pageshow','[data-role=page]', function(){
console.log("Init Map for page: " + this.id);
$("#map_" + this.id).html('TEST');
});
委派的事件处理程序:
委托事件处理程序通过侦听所需元素的祖先来工作,然后当所选事件冒泡到该元素时,它应用jQuery选择器来查找所需元素,然后将函数应用到导致事件的任何匹配元素
如果您没有一个方便、不变的祖先,请使用$(document).on
,但决不要使用$(“body”)。on
因为body
对委托事件有一些奇怪的副作用
委派事件有几个好处:
- 简化和分离事件代码
- 您没有向项目添加单个处理程序的开销
for
循环(不需要)。非常感谢你的帮助。为什么循环不是必需的,它只显示细节页面?(我很着迷,因为它只显示在正确的位置,但我不知道它如何知道要显示哪些页面)这是因为它搜索“地图”id吗?谢谢。那么在调用这个函数之后,这个方法是否会对每个页面运行,但它不会进行替换,因为其他页面没有映射id?
// e.g. Match pageShow events from any pages with data-role=
$(document).on('pageshow','[data-role=page]', function(){
console.log("Init Map for page: " + this.id);
$("#map_" + this.id).html('TEST');
});