javascriptjquerycsstwitter-bootstrapjqtouch

How to create a toggle button in Bootstrap


I originally created a web app in HTML, CSS and JavaScript, then was asked to create it again in Bootstrap too. I've done it all fine, but I had toggle buttons in the web app that have changed back to radio (originally checkbox) buttons instead of the toggle buttons I had originally.

The code for the buttons is:

<label>
  Notifications
  <span class='toggle'>
    <input type='radio'
      class='notifications'
      name='notifications'
      id='notifications' />
  </span>
</li>
<label>
  Preview
  <span class='toggle'>
    <input type='radio'
      class='preview'
      name='preview'
      id='preview' />
  </span>
</li>

and the JavaScript and CSS files that the HTML page is linked to are:

<script src = 'jqtouch.js'></script>
<script src="jquery.js"></script>
<script src="js/bootstrap.js"></script>
<link href="css/bootstrap.css" rel="stylesheet">
<link href="css/bootstrap-responsive.css" rel="stylesheet">

Is there a way to change the code so I can get the toggle button back?


Solution

  • Initial answer from 2013

    An excellent (unofficial) Bootstrap Switch is available.

    Classic 2013 Switch

    <input type="checkbox" name="my-checkbox" checked>
    $("[name='my-checkbox']").bootstrapSwitch();
    

    It uses radio types or checkboxes as switches. A type attribute has been added since V.1.8.

    Source code is available on Github.

    Note from 2018

    I would not recommend to use those kind of old Switch buttons now, as they always seemed to suffer of usability issues as pointed by many people.

    Please consider having a look at modern Switches like this one from the React Component framework (not Bootstrap related, but can be integrated in Bootstrap grid and UI though).

    Other implementations exist for Angular, View or jQuery.

    Modern 2018 Switch

    import '../assets/index.less'
    import React from 'react'
    import ReactDOM from 'react-dom'
    import Switch from 'rc-switch'
    
    class Switcher extends React.Component {
      state = {
        disabled: false,
      }
    
      toggle = () => {
        this.setState({
          disabled: !this.state.disabled,
        })
      }
    
      render() {
        return (
          <div style={{ margin: 20 }}>
            <Switch
              disabled={this.state.disabled}
              checkedChildren={'开'}
              unCheckedChildren={'关'}
            />
            </div>
          </div>
        )
      }
    }
    
    ReactDOM.render(<Switcher />, document.getElementById('__react-content'))
    

    Native Bootstrap Switches

    See ohkts11's answer below about the native Bootstrap switches.