我遇到了一个似乎是一个简单问题的问题。我想以编程方式更改/更新按钮的按钮文本。然而,在看了几个不同的类似问题后,我仍然没有更接近。
我正在使用Chrome与jQuery 1.9和JQM 1.3 Final。
HTML (此块位于属于页脚的网格内)
<div class="ui-block-b">
<div class="ui-bar ui-bar-e" style="height:40px">
<a href="#" class="footerWishOption footerDeleteWish" data-role="button" data-icon="trash">Slett ønske</a>
</div>
</div>
JS
changeButtonText是一个找到here的插件。
// 1. Does not work
$('.footerDeleteWish').changeButtonText("Gjenopprett
ønske");
// 2. Does not work
$('.footerDeleteWish .ui-btn-text').text("Gjenopprett ønske");
$('.footerDeleteWish').refresh();
// 3. Does not work
$('.footerDeleteWish').text("Gjenopprett ønske").refresh();
更新/解决方案:
如下面答案中的评论所述,问题在于页脚的可见性。即使页脚是在DOM中创建的,选择器也没有找到它,因为它被隐藏了。
答案 0 :(得分:3)
有三种常见方式:
$(document).on('pagebeforeshow', '#index', function(){
$('#custom-btn span span').text('This is a new text');
});
实例:http://jsfiddle.net/Gajotres/EjVfz/
这个解决方案预计随着未来的按钮实现不会改变,一切都将保持不变。
$(document).on('pagebeforeshow', '#index', function(){
$('#custom-btn').find('.ui-btn-text').text('This is a new text');
});
实例:http://jsfiddle.net/Gajotres/QHg3w/
这个解决方案是一个安全的解决方案,无论使用哪个按钮示例(a,按钮,输入),按钮文本将始终位于.ui-btn-text类中。
$(document).on('pagebeforeshow', '#index', function(){
$('#custom-btn').changeButtonText('This is a new text');
});
(function($) {
/*
* Changes the displayed text for a jquery mobile button.
* Encapsulates the idiosyncracies of how jquery re-arranges the DOM
* to display a button for either an <a> link or <input type="button">
*/
$.fn.changeButtonText = function(newText) {
return this.each(function() {
$this = $(this);
if( $this.is('a') ) {
$('span.ui-btn-text',$this).text(newText);
return;
}
if( $this.is('input') ) {
$this.val(newText);
// go up the tree
var ctx = $this.closest('.ui-btn');
$('span.ui-btn-text',ctx).text(newText);
return;
}
});
};
})(jQuery);