Изменить текст кнопки JQuery Mobile - PullRequest
33 голосов
/ 24 октября 2010

Я использую новую версию jquery mobile 1.0 alpha 1 для создания мобильного приложения, и мне нужно иметь возможность переключать текст кнопки.Переключение текста работает нормально, но как только вы выполняете замену текста, форматирование css прерывается.

Снимок экрана с ошибкой форматирования: http://awesomescreenshot.com/03e2r50d2

    <div class="ui-bar">
        <a data-role="button" href="#" onclick="Podcast.play(); return false" id="play">Play</a>
        <a data-role="button" href="#" onclick="Podcast.download(); return false" id="download">Download</a>
        <a data-role="button" href="#" onclick="Podcast.consumed(); return false" id="consumed">Mark Old</a>
    </div>

$("#consumed").text("Mark New");

Ответы [ 10 ]

67 голосов
/ 24 октября 2010

Когда вы создаете кнопку, она добавляет некоторые дополнительные элементы, некоторые внутренние <span> элементы, которые выглядят так:

<a data-role="button" href="#" onclick="Podcast.consumed(); return false" id="consumed">
  <span class="ui-btn-inner ui-btn-corner-all">
    <span class="ui-btn-text">Mark Old</span>
  </span>
</a>

Чтобы изменить текст, вам понадобится этот селектор:

$("#consumed .ui-btn-text").text("Mark New");
12 голосов
/ 20 апреля 2012
<a data-role="button" href="#" id="consumed">Mark Old</a>

Вы хотите:

$('#consumed').text('Mark New');
$('#consumed').button('refresh');

Причина в том, что ваши изменения должны быть обратно совместимы с будущими версиями jQuery mobile.

9 голосов
/ 19 июля 2012

Я прочитал это и различные варианты онлайн и думаю, что у меня может быть более простое решение.Он определенно работает для ссылок, которые вы превращаете в кнопку с атрибутом data-role = "button".

Просто поместите текст кнопки в отдельный диапазон, а затем измените содержимое диапазона в своемJavaScript.

например,

<a data-role="button" href="#" id="consumed"><span id="oldBtnText">Mark Old</span></a>

Тогда простой

$('#oldBtnText').html("Old");

сделает работу.Это также не должно быть проблемой, если jQuery меняет свою структуру.

8 голосов
/ 02 сентября 2011

Я написал простой плагин, чтобы сделать это либо для кнопки на основе ссылки, либо для кнопки <input type="button">.Так что если у вас есть

<input type="button" id="start-button" val="Start"/>

или

<a href="#" data-role="button" id="start-button">Start</a>

В любом случае, вы можете изменить отображаемый текст с помощью

$("#start-button").changeButtonText("Stop");

Вот плагин:

(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);

... потому что добавление кода в зависимости от того, как именно jQuery Mobile отображает эти кнопки, не очень хорошая идея.Правило программирования: если вам нужно использовать хак, изолируйте его от хорошо документированного, многократно используемого фрагмента кода.

3 голосов
/ 22 октября 2011

Это работает для меня:

$('#idOfOriginalButton').prev('.ui-btn-inner').children('.ui-btn-text').html('new text');

решение от: http://forum.jquery.com/topic/changing-text-works-except-for-buttons

1 голос
/ 30 мая 2011

Для разметки типа

<button id="consumed">Mark Old</button>

$("#consumed").html("Mark New");
$("span > span", $("#consumed").parent()).html("Mark New");
0 голосов
/ 03 сентября 2013

По какой-то причине у меня нет классифицированного интервала 'ui-btn-text' в первый раз, когда я хочу изменить текст кнопки.Поэтому я обхожу это так:

var button = $("#consumed");
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);
}
0 голосов
/ 11 апреля 2013

Начиная с JQM 1.3.1 (может быть, раньше?) Простой .text (), похоже, поддерживается.

0 голосов
/ 10 января 2013

Для тех, кто заинтересован в простом решении, я создал плагин под названием Audero Text Changer .

0 голосов
/ 29 августа 2012

В новой мобильной версии jquery внутри кнопки есть внутренний тег span.

Таким образом, вам не нужно менять текст тега 'a', а менять текст внутреннего диапазона.

, например

$ ("# потреблено .ui-btn-text"). Text ("test");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...