【问题标题】:jQuery mobile cannot refresh the collapsiblesetjQuery mobile 无法刷新可折叠集
【发布时间】:2013-06-27 01:27:51
【问题描述】:

我正在使用 jQuery mobile 创建一个应用程序,并从 wordpress throw jsonp 加载它的菜单和页面。 我以 collapsibleset 和 listview 的形式加载它的菜单,但我不断收到错误。 当我尝试通过此代码刷新可折叠集时

$(".childnev").html(list);
$.mobile.loading( 'hide');
$('.popupmenu').slideToggle('slow');

$(".childnev").collapsibleset('refresh');

$(".childsublist").listview().listview('refresh');

它给了我这个错误

Error: cannot call methods on collapsibleset prior to initialization;
attempted to call method 'refresh'

当我尝试通过这段代码刷新时。

$(".childnev").html(list);
$.mobile.loading( 'hide');
$('.popupmenu').slideToggle('slow');

$(".childnev").collapsibleset();
$(".childnev").collapsibleset('refresh');

$(".childsublist").listview().listview('refresh');

它又给了我这个错误

TypeError: o[0] is undefined

我是否遗漏了什么或做错了什么?

【问题讨论】:

  • 发布一个 jsfiddle。它在哪一行给出打字错误?同时发布您的html
  • jsfiddle.net/jdZdG/3 hare we go ...
  • 您是否尝试按照答案中的建议进行更改?
  • 是的,我在本地机器上试过了,但没有用,你可以在 jsfiddle 上试试
  • 在这种情况下,您只需在活动页面上调用一次。其余的动态页面将在插入 DOM 后自动增强。所以你不需要对它们进行进一步的改进。

标签: jquery jquery-mobile jquery-mobile-listview jquery-mobile-collapsible


【解决方案1】:

你需要做的就是添加这个

Demo

$('[data-role=collapsible-set]').collapsibleset().trigger('create');

这将增强当前页面(活动页面)的[data-role=listview][data-role=collapsible-set] 标记。您可以将$('[data-role=collapsible-set]') 替换为任何选择器。


注意事项

  • 根据您comment 中的小提琴,您有很多错误。 .ready 不应该与 jQuery Mobile 一起使用。此外,.live 已不再使用,因此将.live 替换为.on

  • 增强方法 refreshcreatepagecreateupdatelayout 旨在用于当前页面(活动页面 - $.mobile.activePage)重新应用jQuery 移动风格。对于动态创建且位于 DOM 中的页面,无需使用任何增强方法 - 甚至 .page()pagecreate - 因为页面及其内容一旦放入 DOM 中就会得到增强。

【讨论】:

  • 我实现了你的解决方案,但它不起作用你能否在小提琴 jsfiddle.net/jdZdG/4 上实现它,只是为了知道我以正确的方式实施的天气。
  • @AbhimanueTamang 标记增强,应始终放在循环外,放在循环结束后。
  • @AbhimanueTamang 并确保删除任何其他增强方法,例如listview()collapsibleset()。只使用上面的那个。
  • 感谢@Omar,您的解决方案在小提琴上工作,但在本地机器上,当我删除它们时我动态创建了一些页面,当我再次添加它们时它运行良好,它开始给我同样的问题。你能猜出会是什么问题吗?
  • @AbhimanueTamang 我已经根据你的评论更新了我的答案,祝你好运!
【解决方案2】:

由于您将可折叠的 se 动态附加到该类,因此无法刷新它,因为它没有被创建。你需要创建它。

你必须使用

$(".childnev").html(list).trigger('create');

【讨论】:

    【解决方案3】:

    可折叠集未初始化。您正在替换 html,因此您需要在元素上触发 create

    替换$(".childnev").collapsibleset('refresh');

    $(".childnev").trigger('create');
    

    仅在动态追加、删除元素时使用刷新方法。

    【讨论】:

    • $(".childnev").html(list).trigger('create');
    • @SubhashSasidharakurup 是的,你是对的。也可以使用事件链,也可以单独调用方法。
    【解决方案4】:

    为了它的价值:我遇到了一个问题,我尝试使用 .html() 更改现有可折叠 div 上的内容。无论如何,这都不会正确渲染。但是使用 replaceWith() 然后 trigger('create') 替换那个 div(也复制它的 'id)效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      相关资源
      最近更新 更多