将元素附加到动态列表,但浏览器不会刷新 UI
Append element to list dynamically, but browser doesn't refresh UI
>我有一个用于加载服务器数据项的 JavaScript 代码段,并将它们插入具有生成的 LI 元素的 UL 元素中,如下所示:
函数加载新文件模板() { var list = _fileTemplateContainer.find("ul"); $.submitToServer("[server URL]", null, function (data) { list.empty(); 如果(数据 == ") { list.append("模板不可用");在示例代码中,删除了 HTML 标记 } 否则 { $.each(data, function (index, item) { var itemElement = $("[HTML template string]"); itemElement.find("div[data-field='image']").css("background-image", "url(" + item.icon + ")"); itemElement.find("div[data-field='caption']").text(item.caption); itemElement.find("div[data-field='description']").text(item.description); itemElement.find("div[data-field='type']").text(item.type); itemElement.bind("click", function (e) { $(e.target).parents("ul").find("li").removeClass("projectSelected"); $(e.target).parents("li").addClass("projectSelected"); }); itemElement.appendTo(list); }); } 控制台.log(列表); });}
此代码在第一次加载时有效,但在第二次加载时,将元素插入 UL 元素后 UI 无法刷新。
我确认数据已成功插入(使用 console.log() 输出结果),所以我找不到这个问题的原因。
请查看此问题的屏幕截图。
如何解决这个问题?谢谢。
我的浏览器: 铬 19.0.1084.56, IE 9.0.8112.16421j查询版本 1.5.1
我自己解决了这个问题。
我使用我的jQuery插件使用以下代码初始化此表单:
designFrameManager.updateFrameBody(data);数据是一个 HTML 字符串。 projectDesigner = $(data).projectDesigner({ height: designFrameManager.getBodyHeight(), width: designFrameManager.getBodyWidth(), 项目名称:名称 });
updateFrameBody() 方法的代码:
this.updateFrameBody = function (ui, initFunction) { _designFrameBody.html(用户界面); if (initFunction != null && $.isFunction(initFunction)) initFunction(); };
我认为插件的初始化无法绑定到 DOM,因为 init 操作是在 UI 绑定到 DOM 之后,因此 DOM 无法在我的脚本调用后自动刷新更改。
因此,我将代码更新为:
projectDesigner = $(data).projectDesigner({ height: designFrameManager.getBodyHeight(), width: designFrameManager.getBodyWidth(), 项目名称:名称 }); designFrameManager.updateFrameBodyByObject( 项目设计器//初始化的对象 );
updateFrameBodyByObject() 方法的代码:
this.updateFrameBodyByObject = function (ui, initFunction) { _designFrameBody.html("); _designFrameBody.append(ui); if (initFunction != null && $.isFunction(initFunction)) initFunction(); };
此问题已成功修复。
感谢所有回复。
尝试运行以下命令: $('ul').listview('refresh');
相关文章:
- 同步(阻塞)ajax调用是否可以阻塞浏览器'的UI
- Semantic-UI JavaScript:如何检查支持的浏览器
- 自定义右键单击UI上下文菜单(复制、粘贴、剪切)用于整个应用程序(所有网页)跨所有浏览器而非单个网页
- AngularJs:UI路由器浏览器刷新,移动到第一个子状态
- AngularJS UI路由器,部分视图和来自浏览器地址栏的调用视图
- 将元素附加到动态列表,但浏览器不会刷新 UI
- 删除浏览器底部在 jQuery UI 选项卡的鼠标悬停上显示的 URL
- 通过 ajax 在新的浏览器选项卡中打开 JQuery UI 选项卡将直接显示 ajax 响应的 HTML
- 使用 ui 路由器的浏览器导航控件
- 浏览器的实时UI同步库
- 用户modernizr强制浏览器使用jQuery UI日期选择器,而不是浏览器日期选择器
- Angular ui路由器:按下浏览器中的后退按钮,停止控制器重新加载
- 哪个javascript UI框架是我对跨平台/浏览器性能的赌注
- 我可以在浏览器ui线程和web工作线程中安全地使用html5中的哪些本地存储
- 如何确定浏览器UI事件是否具有相同的“;原因”;
- 谷歌浏览器's滚动条和jQuery UI's的可拖动插件
- 将浏览器UI按钮添加到Firefox web扩展中
- 如何在Firefox中获得浏览器UI语言?
- 检测与Mobile Safari内浏览器UI的交互
- 有没有办法找出浏览器UI线程是否忙