Как удалить активное состояние кнопки с помощью jQuery Mobile? - PullRequest
19 голосов
/ 22 сентября 2011

В моем мобильном приложении с помощью jQuery Mobile ...

  • Я бы хотел, чтобы простая кнопка выполняла простую функцию JavaScript при нажатии. Нет переходов страниц, ничего особенного.

  • Я понял, что могу устранить переходы страниц, выполнив return false или preventDefault()

  • Но проблема в том, что кнопки придерживаются «активного» состояния, то есть подсвечиваются синим цветом, если вы используете общую тему. Мне интересно, как я могу удалить это после щелчка (или нажмите, и т. Д.).

Спасибо.

Ответы [ 8 ]

17 голосов
/ 10 июля 2012

Вы можете отключить состояние «подсвеченный синий» в событии «mobileinit» перед загрузкой jQueryMobile-script:

<head>
    <script>
    $(document).bind('mobileinit', function () {
        $.mobile.activeBtnClass = 'unused';
    });
    </script>
    <script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
</head>

Теперь, когда вы нажимаете на ссылку, после щелчка ни один класс не будет добавлен. У вас все еще будут классы 'hoover' и 'down'.

12 голосов
/ 22 сентября 2011

Обновление:

Этот вопрос и предложенные хаки теперь немного устарели. jQuery mobile обрабатывает кнопки немного иначе, чем 3 года назад, а также, jQuery mobile теперь имеет несколько различных определений «кнопки». Если вы хотите сделать то, что искал ОП, теперь вы можете избежать этой проблемы, используя следующую команду:

Шаг 1:

<button class="ui-btn myButton">Button</button>

В качестве альтернативы вы также можете использовать кнопки мобильного ввода jQuery:

<form>
    <input value="Button One" type="button" class="myButton">
    <input value="Button Two" type="button" class="myButton2">
</form>

Шаг 2: Тогда ваш стандартный jquery on обратный вызов:

$(".myButton").on("tap", function(e) {
    // do your thing
});

Если вы используете кнопку или вкладку, или что-то еще, к которому применен «активный» класс (по умолчанию ui-btn-active), старый ответ все равно может быть кому-то полезен. Также, здесь - скрипка , демонстрирующая код ниже.


Выборочное удаление активного состояния:

Как показано в другом ответе, вы можете отключить активное состояние для всех кнопок на всех страницах. Если это приемлемо для рассматриваемого проекта, это подходящее (и более простое) решение. Однако, если вы хотите отключить активное состояние для некоторых кнопок при сохранении активных состояний для других, вы можете использовать этот метод.

Шаг 1:

    $(document).bind('mobileinit', function() {
        $(document).on('tap', function(e) {
            $('.activeOnce').removeClass($.mobile.activeBtnClass);
        });
    });

Шаг 2:

Затем добавьте класс activeOnce (или как вы хотите его называть - это пользовательский класс) к кнопкам, которые вы не хотите выделять при нажатии.

И, как обычно, когда привязываете что-либо к mobileinit, убедитесь, что вы поместили свои привязки - и, возможно, лучше, весь свой код JavaScript - ниже сценарий jQuery и выше скрипт jQuery-mobile.

<script src="js/jquery.js"></script>
<script src="js/my_script.js"></script>
<script src="js/jquery.mobile.js"></script>
7 голосов
/ 13 августа 2012

Do NOT установите для activeBtnClass значение '', как предложено, это приведет к ошибкам при закрытии диалогов и функции pageLoading.

Описанный метод работает, но не может быть установлен равным нулюпеременная activeBtnClass используется в качестве селектора, поэтому установите для нее несуществующий класс, чтобы получить тот же эффект без ошибки.

<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <script type="text/javascript">
        $(document).bind('mobileinit', function () {
            $.mobile.activeBtnClass = 'aBtnSelector';
        });
    </script>
    <script type="text/javascript" src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
</head>

Это хорошо работает для удаления выделенияот кнопок, сохраняя активное состояние на других элементах.

0 голосов
/ 05 августа 2017

Это работает для кнопки в заголовке JqueryMobile Tab

<style>
.Foo {
    color: #FFF !important;
    background: #347b68 !important;
 }
</style>

<div id="headerTab" data-id="headerTab" data-role="navbar">
  <ul id="header_tabs">
    <li><a href="#" data-transition="none" id="unique-id" class="Foo">name</a>
          </li>
  </ul>
</div>
0 голосов
/ 28 апреля 2015

Я потратил большую часть дня и ночи, чтобы найти ответ на эту проблему, возникающую, в основном, на Android PhoneGap. Вместо стандартных кнопок JQM я использую пользовательские изображения с: активным состоянием в CSS. Перейдя по ссылке на следующую страницу и нажав назад, кнопка просто останется в активном состоянии. Я попытался добавить классы и удалить классы и различные другие предложения, но ничего не помогло.

Итак, я придумал свое собственное маленькое исправление, которое работает как угощение и может помочь любому, кто сидит здесь, в тупике. Я просто вызываю этот фрагмент кода на pagecontainerchange, используя data.toPage [0] .id, чтобы вызывать его только на странице, где происходит активное состояние. Просто убедитесь, что ваши кнопки обернуты в div, в моем случае это называется "themenu".

function ResetMenu() {
var menuHtml = $("#themenu").html();
$("#themenu").empty().html(menuHtml).trigger("create");

}

0 голосов
/ 23 декабря 2013
If you want to support non touch devices you should add timeout.

$('.btn' ).on('touchend click', function() {
    var self = this;
    setTimeout(function() {
            $(self).removeClass("ui-btn-active");
        },
    0);
});
0 голосов
/ 20 марта 2013

Что я делаю, это заставляю кнопки возвращаться в неактивное состояние до того, как страница изменится.

//force menu buttons to revert to inactive state
$( '.menu-btn' ).on('touchend', function() {
    $(this).removeClass("ui-btn-active");
});
0 голосов
/ 07 марта 2013

вы можете просто сделать это с помощью CSS вместо Java:

Например: (вы поняли)

...