【问题标题】:JqueryMobile dynamic css not renderingJqueryMobile动态css不渲染
【发布时间】:2012-04-19 20:00:31
【问题描述】:

我的文档中有 2 页。活动页面显示一个列表,单击该列表,我显示第二页。第二个页面的 content div 是动态添加的,以及一些自定义的 JS 中的 css。下面的 Java 脚本完成了这项工作,但我无法获得 css 渲染。

   $("#showmore").live("click", function(event, param1){       
        getUrl = $(this).attr('data-href');
        $.post(getUrl, function(data){  
            $.mobile.hidePageLoadingMsg(); 
            $('#more').html(data);
            $.mobile.activePage.page().trigger('refresh');
        });    
    });    

我也试过$.mobile.activePage.trigger('create'); 。这可行,但我来回翻阅两页。但是当我第二次点击列表时,内容根本没有被渲染。它是一个只有页眉的空白页!

任何人都可以分享您的专业知识,了解我如何使用 css 将动态内容添加到辅助页面并在同一页面上显示我想多次显示的内容?

【问题讨论】:

  • 我正在寻找我认为相同的答案。我正在尝试更改单个列表项的背景。 JQM 在我之后添加了他们的 CSS 类,从而覆盖了它们。
  • @Mike_G 当 jQuery Mobile 在初始化小部件时添加类时,您的类不会被删除。这使您能够在 CSS 声明中使用 !important,或者您可以制定更具体的 CSS 规则,以便在 jQuery Mobile 类上使用它们:.ui-mobile .ui-page .ui-content .ui-listview .ui-li .ui-btn { color : hot-pink; }... 例如将覆盖 jQuery Mobile 样式,因为它是如此具体(但适用于 jQuery Mobile 网页内的伪页面内的内容部分内的列表视图列表项内的所有按钮)。
  • 非常感谢贾斯珀的小费!

标签: jquery-mobile


【解决方案1】:

您只需在要替换的元素上调用.trigger('create')

$("#showmore").live("click", function(event, param1){       
    var getUrl = $(this).attr('data-href');//don't unnecessarily create global vars
    $.post(getUrl, function(data){  
        $.mobile.hidePageLoadingMsg();

        //since you are only changing this HTML, you only have to initialize this HTML
        $('#more').html(data).trigger('create');
    });    
});

我遇到过这种情况似乎不起作用,但我成功地分别初始化了每种类型的小部件,如下所示:

$("#showmore").live("click", function(event, param1){       
    var getUrl = $(this).attr('data-href');//don't unnecessarily create global vars
    $.post(getUrl, function(data){  
        $.mobile.hidePageLoadingMsg();

        $('#more').html(data).find('a[data-role="button"]').button().end()
                             .find('ul[data-role="listview"], ol[data-role="listview"]').listview().end()
                             ...
    });    
});

这是一个动态添加 HTML 到 DOM 的演示,然后让 jQuery Mobile 初始化 HTML 中的小部件:http://jsfiddle.net/csKtX/

另外,请确保您将 data-role="button"(等)添加到小部件,以便 jQuery Mobile 知道初始化它们(我上面的代码假设您已经这样做了)。

【讨论】:

  • 我什至厌倦了像你建议的那样创建元素。这次没有显示任何动态内容。这是我试图注入content 的页面代码。 `
    `
  • @user1339736 我在答案中添加了一个演示:jsfiddle.net/csKtX。看看这是否可以帮助您解决问题。确保您将正确的 data-role 属性值添加到小部件,我的代码期望这些 data-attributes 存在。
  • 谢谢。我会试着弄清楚。我尝试触发更改的元素以及查找。有趣的发现没有应用 css。但是这两种方法都只在第一次起作用。当我逐页转换返回同一页面时,页面内容为空白。动态内容的一部分是将页面转换到初始页面的链接。从初始页面,我将返回新页面。我将进一步查看您提供的示例代码并查看我的代码,看看我可能做错了什么。
  • 在您的 jsfiddle 示例中,一切都发生在同一页面上。没有发生页面转换。在我拥有的列表中,我将更改为带有动态内容的第二页,然后切换回带有列表的初始页面。所以jsfiddle示例中的情况和我的情况不同。
  • @user1339736 jQuery Mobile 小部件初始化/刷新确实工作得很好,您只需将代码调整为正确的格式。这是一个更新的 JSFiddle,显示您可以随时添加动态内容:jsfiddle.net/csKtX/3(任何不,这不使用 AJAX,但我可以告诉你它在功能上是相同的,所以我不使用 AJAX 的事实不应该播放进入你的情况)。
【解决方案2】:

我最近在使用 jQuery 时也遇到过类似的情况,即动态内容无法在 Firefox 中呈现。我让我的网站正常工作,我认为问题可能出在这条线上: $('#more').html(数据);

尝试用 innerHTML 方法替换它,看看是否可行。

干杯

【讨论】:

  • 如果浏览器支持.innerHTML,当你使用.html()函数时,jQuery会在内部使用.innerHTML
  • 这我知道,但是在我将其缩小到 .html() 的任何/所有用法之后,使用 .innerHTML 修复了它。如果我有空闲时间,我什至可能会尝试找出原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 2018-04-24
  • 2022-01-01
相关资源
最近更新 更多