Cara membuat tombol sakelar di Bootstrap

92

Saya awalnya membuat aplikasi web dalam HTML, CSS dan JavaScript, kemudian diminta untuk membuatnya lagi di Bootstrap juga. Saya telah melakukan semuanya dengan baik, tetapi saya memiliki tombol sakelar di aplikasi web yang telah berubah kembali ke tombol radio (awalnya kotak centang) alih-alih tombol sakelar yang saya miliki sebelumnya.

Kode untuk tombolnya adalah:

<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>

dan file JavaScript dan CSS yang ditautkan ke halaman HTML adalah:

<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">

Apakah ada cara untuk mengubah kode agar saya bisa mendapatkan tombol sakelar kembali?

Megan Sime
sumber
saya menghargai tautannya, tetapi tidak memiliki apa yang saya cari. tombol sakelar yang saya miliki adalah jenis yang Anda lihat di iPhone, seperti jenis 'on' / 'off'. Apakah itu masuk akal?
Megan Sime
ok jadi ini terkait dengan jqtouch.js dan bukan untuk bootstrap itu sendiri saya pikir
itsme
1
baik. itu di github jika itu lebih mudah.
Megan Sime
1
LOL man, saya melihat daftar file yang tak terbatas :) tidak bisakah Anda lebih spesifik? : D
itsme

Jawaban:

80

Jawaban awal dari 2013

Switch Bootstrap yang sangat baik (tidak resmi) tersedia .

Klasik 2013 Switch

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

Ini menggunakan jenis radio atau kotak centang sebagai sakelar. Sebuah typeatribut telah ditambahkan sejak V.1.8.

Kode sumber tersedia di Github .

Catatan dari 2018

Saya tidak akan merekomendasikan untuk menggunakan tombol Sakelar lama semacam itu sekarang, karena mereka sepertinya selalu mengalami masalah kegunaan seperti yang ditunjukkan oleh banyak orang.

Harap pertimbangkan untuk melihat Switch modern seperti ini dari kerangka kerja Komponen React (tidak terkait Bootstrap, tetapi dapat diintegrasikan dalam kisi Bootstrap dan UI).

Implementasi lain ada untuk Angular, View atau 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'))

Sakelar Bootstrap Asli

Lihat jawaban ohkts11 di bawah ini tentang sakelar Bootstrap asli .

smonff
sumber
19
Saya akan menghindari sakelar tersebut: ux.stackexchange.com/questions/1318/…
ckarbass
3
Situs ini sudah tidak ada
w3bMak3r
Anda benar @ w3bMak3r, nama domain telah diubah. Diperbarui.
smonff
Itu plugin yang bagus. mudah digunakan. tetapi masalah dengan safari 5.1.7. Saat saya mengklik sekali, yang lain sedang bergerak. ada yang bisa memecahkan ini?
Sarower Jahan
2
Bootstrap Toggle adalah alternatif berbasis bootstrap lainnya
Charles P.
58

Jika Anda tidak keberatan mengubah HTML, Anda dapat menggunakan data-toggleatribut di <button>s. Lihat bagian Sakelar tunggal dari contoh tombol :

<button type="button" class="btn btn-primary" data-toggle="button">
    Single toggle
</button>
Sam
sumber
1
Apakah ada cara untuk memiliki kotak centang internal dalam satu tombol seperti di kotak centang / opsi radio ?
Shimmy Weitzhandler
3
aria-pressed="true"dapat digunakan untuk memeriksa status
brauliobo
31

Bootstrap 3 memiliki opsi untuk membuat tombol sakelar berdasarkan kotak centang atau tombol radio: http://getbootstrap.com/javascript/#buttons

Kotak centang

<div class="btn-group" data-toggle="buttons">
  <label class="btn btn-primary active">
    <input type="checkbox" checked> Option 1 (pre-checked)
  </label>
  <label class="btn btn-primary">
    <input type="checkbox"> Option 2
  </label>
  <label class="btn btn-primary">
    <input type="checkbox"> Option 3
  </label>
</div>

Tombol radio

<div class="btn-group" data-toggle="buttons">
  <label class="btn btn-primary active">
    <input type="radio" name="options" id="option1" checked> Option 1 (preselected)
  </label>
  <label class="btn btn-primary">
    <input type="radio" name="options" id="option2"> Option 2
  </label>
  <label class="btn btn-primary">
    <input type="radio" name="options" id="option3"> Option 3
  </label>
</div>

Agar ini bekerja, Anda harus menginisialisasi .btns dengan Javascript Bootstrap:

$('.btn').button();
StriplingWarrior
sumber
Apakah ada cara untuk memiliki kotak centang internal dalam satu tombol seperti di kotak centang / opsi radio ?
Shimmy Weitzhandler
@Shimmy: Jika Anda hanya menempatkan satu kotak centang ke dalam grup tombol, Anda akan mendapatkan perilaku yang sama. Saya tidak mengetahui cara apa pun yang tidak terlalu bertele-tele untuk mendapatkan sakelar tunggal yang didukung kotak centang.
StriplingWarrior
7

Saya sudah mencoba mengaktifkan kelas 'aktif' secara manual dengan javascript. Ini tidak dapat digunakan sebagai perpustakaan lengkap, tetapi untuk kasus yang mudah tampaknya sudah cukup:

var button = $('#myToggleButton');
button.on('click', function () {
  $(this).toggleClass('active');
});

Jika dipikir dengan hati-hati, kelas 'aktif' digunakan oleh bootstrap saat tombol ditekan, bukan sebelum atau sesudah itu (kasus kami), jadi tidak ada konflik dalam menggunakan kembali kelas yang sama.

Coba contoh ini dan beri tahu saya jika gagal: http://jsbin.com/oYoSALI/1/edit?html,js,output

p2kmgcl
sumber
1
Saya pikir pengguna tidak menanyakannya, tetapi tanggapan Anda hanya menjawab pertanyaan saya!
tetri
Saya pikir itu akan menjadi pertanyaan pengguna berikutnya.
eaglei22
5

Jika Anda ingin mempertahankan basis kode kecil, dan Anda hanya akan memerlukan tombol sakelar untuk sebagian kecil aplikasi. Saya akan menyarankan sebagai gantinya pertahankan kode javascript Anda sendiri (angularjs, javascript, jquery) dan cukup gunakan CSS biasa.

Generator tombol sakelar yang bagus: https://proto.io/freebies/onoff/

Rick
sumber
3

Di sini ini sangat berguna untuk Tombol Toggle Bootstrap . Contoh dalam potongan kode !! dan jsfiddle di bawah.

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
    <script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
    <input id="toggle-trigger" type="checkbox" checked data-toggle="toggle">
    <button class="btn btn-success" onclick="toggleOn()">On by API</button>
<button class="btn btn-danger" onclick="toggleOff()">Off by API</button>
<button class="btn btn-primary" onclick="getValue()">Get Value</button>
<script>
  //If you want to change it dynamically
  function toggleOn() {
    $('#toggle-trigger').bootstrapToggle('on')
  }
  function toggleOff() {
    $('#toggle-trigger').bootstrapToggle('off')  
  }
  //if you want get value
  function getValue()
  {
   var value=$('#toggle-trigger').bootstrapToggle().prop('checked');
   console.log(value);
  }
</script>
Saya tunjukkan beberapa contoh di atas. Saya harap ini membantu. Js Fiddle di sini Kode sumber tersedia di GitHub.

Perbarui 2020 Untuk Bootstrap 4

Saya merekomendasikan bootstrap4-toggle pada tahun 2020.

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">

<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>

<link href="https://cdn.jsdelivr.net/gh/gitbrent/[email protected]/css/bootstrap4-toggle.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/gh/gitbrent/[email protected]/js/bootstrap4-toggle.min.js"></script>

<input id="toggle-trigger" type="checkbox" checked data-toggle="toggle" data-onstyle="success">
<button class="btn btn-success" onclick="toggleOn()">On by API</button>
<button class="btn btn-danger" onclick="toggleOff()">Off by API</button>
<button class="btn btn-primary" onclick="getValue()">Get Value</button>

<script>
  //If you want to change it dynamically
  function toggleOn() {
    $('#toggle-trigger').bootstrapToggle('on')
  }
  function toggleOff() {
    $('#toggle-trigger').bootstrapToggle('off')  
  }
  //if you want get value
  function getValue()
  {
   var value=$('#toggle-trigger').bootstrapToggle().prop('checked');
   console.log(value);
  }
</script>

Muhammet Bisa TONBUL
sumber
Singkat, dan langsung ke sasaran, solusi cepat dan mudah, Anda membuat hari saya menyenangkan!
Mayer Spitzer
2

Anda dapat menggunakan pustaka Sakelar Toggle CSS. Cukup sertakan CSS dan program JS sendiri: http://ghinda.net/css-toggle-switch/bootstrap.html

OMA
sumber
1
Meskipun ini mungkin menjawab pertanyaan, lebih baik memberikan informasi aktual di sini dan bukan hanya tautan. Jawaban link saja tidak dianggap sebagai jawaban yang baik dan mungkin akan dihapus .
elixenide
Tapi ini bukan tautan ke penjelasan. Ini adalah tautan ke perpustakaan yang sebenarnya, yang saya sebutkan namanya dalam jawaban saya. Apakah Anda benar-benar ingin saya memposting seluruh kode sumber perpustakaan di sini? Jawaban saya hanya akan salah jika saya hanya mengatakan "gunakan perpustakaan ini: [link]" tanpa menyebutkan nama perpustakaan, tetapi karena saya menyebutkan namanya, saya rasa jawabannya cocok karena jika tautannya rusak, dia / dia dapat mencoba mengunduh pustaka dari tempat lain, karena namanya diketahui.
OMA
Anda tidak harus memposting seluruh kode sumber perpustakaan, tetapi paling tidak Anda perlu menawarkan beberapa wawasan tentang cara menggunakannya. "Cukup sertakan CSS dan program JS sendiri" tidak akan banyak membantu dan tidak akan membantu OP atau pengguna lain.
elixenide
2
Yah, itu sangat mudah digunakan! Cukup sertakan salah satu contoh kode CSS dan kemudian program JS dengan apa pun yang ingin Anda lakukan. Saya tidak dapat mengomentari pemrograman JS yang sebenarnya, karena poster asli tidak meminta tindakan tertentu untuk dilakukan saat menggunakan tombol sakelar, jadi apa lagi yang dapat saya katakan tentang itu? Juga, mengapa jawaban yang diterima dianggap OK? Ini juga merupakan jawaban "hanya tautan"! (hanya mengatakan "Tidak yakin apakah itu membantu, tetapi Sakelar Bootstrap yang sangat baik (tidak resmi) tersedia. Meskipun demikian, ia menggunakan jenis radio"). Mengapa jawaban itu oke? Anda tidak berkomentar tentang sifat hanya tautan di sana.
OMA
-1

Jika seseorang masih mencari tombol sakelar / sakelar yang bagus, saya mengikuti saran Rick dan membuat arahan sudut sederhana di sekitarnya, sakelar sudut . Selain lebih memilih saklar bergaya Windows, total unduhan juga jauh lebih kecil (2kb vs 23kb minified css + js) dibandingkan dengan angular-bootstrap-switch dan bootstrap-switch yang disebutkan di atas bersama-sama.

Anda akan menggunakannya sebagai berikut. Pertama, sertakan file js dan css yang diperlukan:

<script src="./bower_components/angular-switch/dist/switch.js"></script>
<link rel="stylesheet" href="./bower_components/angular-switch/dist/switch.css"></link>

Dan aktifkan di aplikasi sudut Anda:

angular.module('yourModule', ['csComp'
    // other dependencies
]);

Sekarang Anda siap menggunakannya sebagai berikut:

<switch state="vm.isSelected" 
    textlabel="Switch" 
    changed="vm.changed()"
    isdisabled="{{isDisabled}}">
</switch>

masukkan deskripsi gambar di sini

Erik Vullings
sumber