【问题标题】:jquery-mobile css not applied on html generated with javascriptjquery-mobile css 不适用于使用 javascript 生成的 html
【发布时间】:2013-08-28 05:29:13
【问题描述】:

我从 JSON 文件中获取数据,然后在 jquerymobile 结构之后使用带有数据角色等的 html 结构来显示它......这是我如何获取数据并显示它的代码:

$(document).on('pageinit', function(){
    $.getJSON("http://danielvivancos.com/edu/wordpress/?json=get_posts&post_type=product", function(data){
    var html = "";
        $.each(data.posts, function(index, d){
        html = html + "<li><a href='" + d.slug + "' data-transition='slidedown'><img src='" + d.thumbnail_images.thumbnail.url + "' /><h3 class='ui-li-heading'> Menu" + index + "</h3></a></li>";
        });
        html= "<ul data-role='listview' data-inset='true'>"+ html + "</ul>";
        $(html).appendTo(".choice_list");


    }).error(function(jqXHR, textStatus, errorThrown){ /* assign handler */
        /* alert(jqXHR.responseText) */
        alert("error occurred!");
    });
});

HTML 中的输出如下:

<li><a href="link1.HTML" data-transition="slidedown"> <img src="source1"><h3> Menu1</h3></a></li>

<li><a href="link2.HTML" data-transition="slidedown"> <img src="source2"><h3> Menu2</h3></a></li>

<li><a href="link3.HTML" data-transition="slidedown"> <img src="source3"><h3> Menu3</h3></a></li>

但我的问题是,即使我按照 jquerymobile 所说的方式显示内容,但应该应用的样式却不是。我的意思是 jquerymobile 脚本添加的所有类都没有添加到我用 javascript 生成的 html 中。任何人都知道我该如何解决?如何保留 jquerymobile 的样式? 非常感谢您!

回答:

 $(html).appendTo(".choice_list").listview(); 

【问题讨论】:

  • $('[data-role='listview]').listview('refresh') 将项目 / 附加到循环之外。也就是说,在关闭.error函数之后。
  • 奥马尔,我试过你说的,但我的“
      ”消失了,甚至没有显示。有什么想法吗?
  • 试试$('[data-role='listview]').listview().listview('refresh')
  • 没有。它继续不显示任何内容。我不明白为什么......请任何帮助将不胜感激。谢谢奥马尔。
  • 对不起,把它放在.error之前。

标签: javascript jquery jquery-mobile


【解决方案1】:

来自 jQuery 移动文档:

当用户单击 jQuery Mobile 驱动的站点中的链接时, 导航系统的默认行为是使用该链接的 href 制定一个 Ajax 请求(而不是允许浏览器的 请求具有完整页面加载的 href 的默认链接行为)。 当那个 Ajax 请求发出时,框架将收到它的全部 文本内容,但它只会注入响应的内容 body 元素(或者更具体地说是 data-role="page" 元素,如果 它已提供),这意味着不会使用页面头部的任何内容 (页面标题除外,它是专门获取的)。

这意味着任何脚本和样式都引用了页面的头部 当通过 Ajax 加载页面时不会产生任何影响,但它们会 如果页面通过 HTTP 正常请求,则执行。

Reference

创建与刷新:一个重要的区别

请注意,create 事件之间有一个重要区别 和某些小部件具有的刷新方法。 create 事件很合适 用于增强包含一个或多个小部件的原始标记。这 refresh 方法应该用于现有的(已经增强的)小部件 已以编程方式操作并需要更新 UI 匹配。

例如,如果您有一个页面,其中动态附加了一个新的 页面创建后具有 data-role=listview 属性的无序列表, 在该列表的父元素上触发 create 会改变它 进入列表视图样式的小部件。如果有更多的列表项 以编程方式添加,调用列表视图的刷新方法将 仅将那些新列表项更新为增强状态并离开 现有的列表项保持不变。

你想在加载后.trigger("create")。

【讨论】:

  • 对不起,这是错误的。 create 与其他小部件一起使用,列表视图接受refresh 方法。
  • @Omar 为什么投反对票?触发创建是您“在页面创建后动态附加一个具有 data-role=listview 属性的新无序列表”的地方,因此 OP 正在执行此操作。
  • 您指的是旧版本的 jQM。现在最新的稳定版本是 1.3.2。 .listview('refresh') 是解决方案。用有效的答案更新您的答案,以便我可以删除反对票。
  • 添加 $(html).appendTo('.choice_list').listview().listview('refresh'); 或 $(html).appendTo('.choice_list').listview(); 作为答案。
【解决方案2】:

您可能需要在您的列表视图中调用refresh:

 $('#myListview').listview('refresh');

参考:http://jquerymobile.com/demos/1.2.1/docs/lists/lists-methods.html

http://jquerymobile.com/demos/1.2.1/docs/lists/docs-lists.html

【讨论】:

  • 我给我的“
      ”一个 id 并尝试刷新它,但它不起作用。有什么想法吗?
  • 你在$(html).appendTo(".choice_list");之后刷新了吗?
  • 你应该追加html吗?我看到您有一个未使用的 myNewStuff 变量。
  • 对不起。 myNewStuff 变量实际上与 html 变量相同。我已经解决了我的问题。是的@Chris Hardie,在那之后我已经刷新了,现在什么都没有显示。
  • 好的,怎么样:$(html).appendTo('.choice_list').listview();?
【解决方案3】:
$(html).appendTo(".choice_list").listview(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多