Как создать кнопку переключения? - PullRequest
93 голосов
/ 21 ноября 2008

Я хочу создать кнопку переключения в HTML, используя CSS. Я хочу, чтобы, когда вы нажимаете на нее, она оставалась нажатой, а затем, когда вы нажимаете на нее снова, она высовывается.

Если нет способа сделать это, просто используя css. Есть ли способ сделать это с помощью jQuery?

Ответы [ 15 ]

1 голос
/ 02 октября 2009

Существует плагин jquery от Swizec , который может делать это среди прочего: https://github.com/Swizec/styled-button

(Старая ссылка http://swizec.com/code/styledButton/, Я не полностью протестировал замену, просто нашел ее с помощью Google.)

0 голосов
/ 02 октября 2012

Постарайтесь;

<li>Text To go with Toggle Button<span class = 'toggle'><input type = 'checkbox' class = 'toggle' name = 'somename' id = 'someid' /></span></li>

И обязательно в

<head><link rel = 'stylesheet' src = 'theme.css'> (from jqtouch - downloadable online)
      <link rel = 'text/javascript' src = 'jquery.js'> (also from jqtouch)
</head>

Помните, что когда вы кодируете это, только somename и someid могут измениться во входном теге, иначе это не сработает.

0 голосов
/ 24 июля 2012

Вот один из примеров / вариантов (более подробно описанных) ToggleButton с использованием jQuery с реализацией <label for="input">.

Сначала мы создадим контейнер для нашей кнопки ToggleButton, используя классические HTML <input> и <label>

.
<span>
  <input type="checkbox" value="1" name="some_feature_to_select" id="feature_cb" style="display: none;"> <!-- We can hide checkbox bec. we want <label> to be a ToggleButton, so we don't need to show it. It is used as our value holder -->
  <label for="feature_cb" id="label_for_some_feature">
    <img alt="Stylish image" src="/images/icons/feature.png">
  </label>
</span>

Далее мы определим функцию для переключения нашей кнопки. Наша кнопка на самом деле является обычной <label>, которую мы будем стилизовать для представления переключения значений.

function toggleButton(button) {

var _for = button.getAttribute('for'); // defining for which element this label is (suppose element is a checkbox (bec. we are making ToggleButton ;) )
var _toggleID = 'input#'+_for; // composing selector ID string to select our toggle element (checkbox)
var _toggle = $( _toggleID ); // selecting checkbox to work on
var isChecked = !_toggle.is(':checked'); // defining the state with negation bec. change value event will have place later, so we negating current state to retrieve inverse (next).

if (isChecked)
    $(button).addClass('SelectedButtonClass'); // if it is checked -> adding nice class to our button (<label> in our case) to show that value was toggled
else
    $(button).removeClass('SelectedButtonClass'); // if value (or feature) was unselected by clicking the button (<label>) -> removing .SelectedButtonClass (or simply removing all classes from element)
}

Функция реализована многоразовым способом. Вы можете использовать его для более чем одной, двух или даже трех созданных кнопок ToggleButton.

... и, наконец, ... чтобы заставить его работать должным образом, мы должны привязать функцию переключения к событию (событию "change") нашей импровизированной кнопки <label> (это будет событие click, потому что не изменяют checkbox напрямую, поэтому событие change не может быть запущено для <label>).

$(document).ready(function(){

    $("#some_feature_label").click(function () {
        toggleButton(this); // call function with transmitting instance of a clicked label and let the script decide what was toggled and what to do with it
    });

    $("#some_other_feature_label").click(function () {
        toggleButton(this); // doing the same for any other feature we want to represent in a way of ToggleButton
    });

});

С помощью CSS мы можем определить backgorund-image или некоторые border, чтобы представить изменение в значении, в то время как <label> сделает для нас работу по изменению значения флажка;).

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 22 августа 2011

Поскольку я тоже искал ответ и хотел добавить его в CSS. Я нашел решение по CSS NINJA Это хорошая работа <input type="checkbox"> и немного CSS Живая демоверсия ! Хотя это не работает в IE 8, вы можете реализовать selectivizr ! и исправьте CSS, где он использует opacity до filter, чтобы он работал в IE.

РЕДАКТИРОВАТЬ 2014:

для новых кнопок переключения я использую решение, найденное в Блог Леа Веру , визуально похожий на флажок iOS

0 голосов
/ 21 ноября 2008

Вы можете использовать «активный» псевдокласс (однако он не будет работать в IE6 для других элементов, кроме ссылок)

a:active
{
    ...desired style here...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...