メニューの項目をクリックして、リンクボタンの値を更新したいと思います。
HTML:
<div id="menu">
<ul data-role="listview" data-icon="false">
<li><a href="#">Value A</a></li>
<li><a href="#">Value B</a></li>
</ul>
</div>
<a href="#" id="selected" data-role="button"></a>
jQueryMobile:
$('#selected').hide();
$("#menu li a").on('click',function(){
$('#selected').html($(this).html()).slideDown().button("refresh");
});
テキストの更新は正常に機能しますが、ボタンcssは適切に更新されません。
次のエラーが表示されます。
不明なエラー:初期化前にボタンのメソッドを呼び出すことはできません。メソッド 'refresh'を呼び出そうとしました
どの初期化について話していますか?ページとボタンはすでに初期化されていますよね?
編集:
私もこれを試しました:
$(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:
<div id="menu">
<ul data-role="listview" data-icon="false">
<li><a href="#">Value A</a></li>
<li><a href="#">Value B</a></li>
</ul>
</div>
<a href="#" id="selected" data-role="button"></a>
JS:
$('#selected').hide();
$("#menu li a").on('click',function(){
$('#selected').html('<span class="ui-btn-inner"><span class="ui-btn-text">' + $(this).html() + '</span></span>').slideDown();
});
この問題には別の解決策があり、これは[〜#〜] article [〜#〜]+説明と動作例。
JQuery Mobileが(DOMインスペクターを使用して)初期化した後、_#selected
_リンク要素のHTML構造を見てください。実際のテキストは、_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は次のようになります。
_<a href="#" data-role="button" data-corners="true" data-shadow="true" data-iconshadow="true" data-wrapperels="span" data-theme="c" class="ui-btn ui-shadow ui-btn-corner-all ui-btn-up-c">
<span class="ui-btn-inner">
<span class="ui-btn-text">Anchor</span>
</span>
</a>
_
ソース: http://view.jquerymobile.com/1.3.0/docs/widgets/buttons/
私は同じ問題を抱えていて、なぜそれが起こるのかを見つけることができませんでした。しかし、初期化の後、クラス「ui-btn-text」のスパンがボタン内に配置されることを知って、次のように回避します:
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宛先ページの欠陥だと思います