我正在尝试动态更新jQuery移动按钮上的文本。该按钮实际上是一个样式为按钮的链接。
根据jQuery移动文档,如果你通过javascript操作按钮,你应该调用button("refresh")
。然而,当我这样做时,按钮的风格变得很疯狂 - 它缩小到一半高度,按钮看起来很垃圾。
这是一个JS小提琴,它演示了这个问题。
代码基本上如下:
$(function() {
// Buttonize
var $button = $("#myCrapButton");
$button.button();
// Change text on click
$button.click(function() {
$button.text("Awesome Button");
$button.button("refresh");
});
});
更重要的是,调用button("refresh")
会导致javascript错误:Cannot call method 'removeClass' of undefined
。
我知道我可以通过操作嵌套在按钮内的.ui-btn-text
span
来解决此问题;但是,这似乎是错误的方法,因为它需要明确了解jquery Mobile的内部工作原理。
谁能告诉我如何让刷新调用工作?
使用版本:
- j查询 1.9.1 jQuery Mobile 1.3.0
- (在JSFiddle中是1.3.0测试版,但最终版本具有相同的行为(。
谢谢!
编辑:
抱歉快速阅读,没有看到您专门寻找刷新功能。正如您注意到的那样,jQM 没有在锚标签按钮上提供这一点。
另一种选择是用新按钮替换按钮,然后让jQM像以前一样添加标记
- http://jsfiddle.net/rfdQC/4/
.JS
$(function() {
// Buttonize
var $button = $("#myCrapButton");
var $clone = $button.clone();
$button.button();
// Change text on click
$button.click(function() {
$clone.text("Awesome Button");
$clone.button();
$button.replaceWith($clone);
});
});
希望这有帮助!
源语言:
您只需要向下钻取到 jQM 添加的添加标记。
<a id="myCrapButton" href="#" class="ui-btn ui-shadow ui-btn-corner-all ui-btn-up-c" data-corners="true" data-shadow="true" data-iconshadow="true" data-wrapperels="span" data-theme="c">
<span class="ui-btn-inner">
<span class="ui-btn-text">
Click me!
</span>
</span>
</a>
您正在更改按钮文本:
<a id="myCrapButton" href="#" class="ui-btn ui-shadow ui-btn-corner-all ui-btn-up-c" data-corners="true" data-shadow="true" data-iconshadow="true" data-wrapperels="span" data-theme="c">
Awesome Button
</a>
这样做会丢失jQM显示按钮所需的添加标记。您需要更改嵌套的范围文本。
$(function() {
// Buttonize
var $button = $("#myCrapButton");
$button.button();
// Change text on click
$button.click(function() {
$button.children().children().text("Awesome Button");
});
});
无需刷新:
<a id="myCrapButton" href="#" class="ui-btn ui-shadow ui-btn-corner-all ui-btn-up-c" data-corners="true" data-shadow="true" data-iconshadow="true" data-wrapperels="span" data-theme="c">
<span class="ui-btn-inner">
<span class="ui-btn-text">
Awesome Button
</span>
</span>
</a>
现场示例:
- http://jsfiddle.net/rfdQC/3/
关系;刚刚在文档顶部找到了这个:
注意:样式类似于按钮的链接具有与 下面是真正的基于表单的按钮,但有一些重要的按钮 差异。基于链接的按钮不是按钮插件的一部分,并且 只需使用底层按钮标记插件即可生成 按钮样式,以便表单按钮方法(启用、禁用、刷新( 不受支持。如果您需要禁用基于链接的按钮(或任何 元素(,可以应用禁用类 UI-禁用 自己用JavaScript来达到同样的效果。
虽然这实际上并没有解决我的问题(如何更新按钮文本( - 至少它回答了为什么不支持"刷新"方法。
编辑:
我知道我可以直接更新按钮上的文本;我在最初的问题中说了很多:
我知道我可以通过操纵 嵌套在按钮内的 .ui-btn-文本跨度;然而,这似乎 喜欢错误的方法,因为它需要明确了解 jquery Mobile的内部工作原理。
我希望通过以某种方式使"刷新"方法起作用来避免此解决方案。但是,根据我后来发现的文档片段(并在上面引用(,我意识到使用"刷新"方法不是一种选择。
鉴于此;我仍然希望有另一种方法可以在不明确解决生成的 DOM 元素的情况下更新按钮上的文本(即通过使用 jQM API( - 但据我所知,没有 API 方法可以这样做。更新 DOM 元素似乎是实现所需结果的唯一方法。
@Phil帕福德($(this).find('span span')
(和@OmarNew2PHP($button.children().children()
(提供的选择器(在我看来(都是不正确的。是的,它们在上面给出的示例中完美运行,但是,如果您向按钮添加图标:
<a id="myCrapButton" href="#" data-icon="delete">Click me!</a>
然后jQM添加了一个额外的span
来显示该图标(为简洁起见,修剪了锚标签属性(:
<a href="#">
<span class="ui-btn-inner">
<span class="ui-btn-text">Delete</span>
<span class="ui-icon ui-icon-delete ui-icon-shadow"> </span>
</span>
</a>
使用上面的选择器会将文本添加到两个内部span
标签中。这是我希望避免直接更新 DOM 的另一个例子 - 因为你不能(也不应该(预测 jQM 将生成什么。
但是,归根结底,更新按钮内文本的最佳方法是使用我希望避免的方法:
$button.click(function() {
$(".ui-btn-text", this).text("Awesome Button");
});
感谢您的回答。
我花了几个小时,最后这对我有用。一种干净的解决方案。所以,如果你有一个javascript,它正在一个元素中创建以下html
<div id="buttonParent">
<a href='#' id="1_button" data-role="button">Click me</a>
<a href='#' id="2_button" data-role="button">Another Click me</a>
</div>
然后调用下面的电话将刷新按钮。
jQuery('#buttonParent').trigger('create');
请注意,下面的工作不起作用,并且给出了例外。
jQuery('#1_button').button('refresh')
可能会帮助像我这样的人。这是浪费时间。JQM 需要修复此错误。我在这些按钮周围有一个包装器,用于可折叠集和刷新,效果很好,但这个刷新按钮不断抛出错误。这很烦人。