初始化之前无法调用方法; 试图调用方法’刷新’

我想通过单击菜单项来更新链接按钮的值。

HTML:

  

jQueryMobile:

 $('#selected').hide(); $("#menu li a").on('click',function(){ $('#selected').html($(this).html()).slideDown().button("refresh"); }); 

文本更新工作正常,但按钮css未正确更新。

我收到以下错误:

未捕获错误:在初始化之前无法调用按钮上的方法; 试图调用方法’刷新’

我们在谈论哪种初始化? 页面和按钮已经初​​始化,不是吗?


编辑:

我也试过这个:

 $(document).on("mobileinit", function() { $('#selected').hide(); $("#menu li a").on('click',function(){ $('#selected').html($(this).html()).slideDown().button("refresh"); }); }); 

没有错误信息; 但没有文字更新:(

问题有时是由jquery-ui和bootstrap-button插件冲突引起的。 jquery-ui代码应该在bootstrap.js之前运行,这解决了问题。

工作实例

这是一个有效的例子: http : //jsfiddle.net/Gajotres/BDmex/

HTML:

   

JS:

 $('#selected').hide(); $("#menu li a").on('click',function(){ $('#selected').html('' + $(this).html() + '').slideDown(); }); 
  • 您在标签按钮内缺少data-role =“button”
  • 因为按钮最初是在没有文本的情况下创建的,所以需要添加具有2个跨度的适当内部结构

二解决方案

这个问题有另一个解决方案,可以在本文+描述和工作示​​例中找到。

在jQuery Mobile初始化之后,查看#selected链接元素的HTML结构(使用DOM检查器)。 实际文本位于带有ui-btn-text类的span元素内。 因此,当您使用.html()函数更新按钮的.html() ,您将覆盖jQuery Mobile创建的HTML结构,从而删除jQuery Mobile添加的格式。

您可以选择作为按钮后代的.ui-btn-text元素来更新文本而不删除格式。

改变这个:

 $('#selected').html($(this).html()).slideDown().button("refresh"); 

对此:

 $('#selected').find(".ui-btn-text").html($(this).html()).slideDown(); 

仅供参考,这是初始化的锚标记按钮的HTML:

   Anchor   

资料来源: http : //view.jquerymobile.com/1.3.0/docs/widgets/buttons/

我有同样的问题,并没有设法找出它发生的原因。 但是知道在初始化之后,一个带有’ui-btn-text’类的span放在按钮内,我就像这样解决它:

 var button = $("#selected"); var innerTextSpan = button.find(".ui-btn-text"); // not initialized - just change label if (innerTextSpan.size() == 0) { button.text(label); // already initialized - find innerTextSpan and change its label } else { innerTextSpan.text(label); } 

我遇到了同样的问题,我通过删除2“”最终的HTML来解决,所以我认为这是html目标页面中的不完美