วิธีสร้างปุ่มสลับใน Bootstrap


93

เดิมทีฉันสร้างเว็บแอปใน HTML, CSS และ JavaScript จากนั้นก็ขอให้สร้างอีกครั้งใน Bootstrap ด้วย ฉันทำได้ดีทั้งหมด แต่ฉันมีปุ่มสลับในเว็บแอปที่เปลี่ยนกลับเป็นปุ่มวิทยุ (ช่องทำเครื่องหมายเดิม) แทนปุ่มสลับที่ฉันมีในตอนแรก

รหัสสำหรับปุ่มคือ:

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

และไฟล์ JavaScript และ CSS ที่เพจ HTML เชื่อมโยง ได้แก่ :

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

มีวิธีเปลี่ยนรหัสเพื่อให้ปุ่มสลับกลับมาหรือไม่?


1
นี่คือตัวอย่างมากมายtwitter.github.com/bootstrap/javascript.html#buttons
itsme

ฉันขอขอบคุณลิงค์ แต่ไม่มีสิ่งที่ฉันกำลังมองหา ปุ่มสลับที่ฉันมีคือเขาใจดีที่คุณเห็นบน iPhone เช่นประเภท "เปิด" / "ปิด" มันสมเหตุสมผลไหม
Megan Sime

ok เพื่อเป็นที่เกี่ยวข้องกับ jqtouch.js และไม่ให้บูตตัวเองผมคิดว่า
itsme

1
ตกลง. มันอยู่ใน github ถ้ามันง่ายกว่านั้น
Megan Sime

1
ฮ่า ๆ ฉันเห็นรายการไฟล์ที่ไม่มีที่สิ้นสุด :) คุณเจาะจงมากกว่านี้ไม่ได้เหรอ? : D
itsme

คำตอบ:


81

คำตอบเริ่มต้นจากปี 2013

ที่ยอดเยี่ยม (ไม่เป็นทางการ) Bootstrap สวิทช์สามารถใช้ได้

สวิตช์คลาสสิก 2013

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

ใช้ประเภทวิทยุหรือช่องทำเครื่องหมายเป็นสวิตช์ typeแอตทริบิวต์ได้รับการเพิ่มตั้งแต่ V.1.8

รหัสที่มาที่มีอยู่บน Github

หมายเหตุจากปี 2018

ฉันไม่แนะนำให้ใช้ปุ่ม Switch แบบเก่าในตอนนี้เนื่องจากดูเหมือนว่าจะประสบปัญหาการใช้งานอยู่เสมอตามที่หลาย ๆ คนชี้ไว้

โปรดพิจารณาดูสวิตช์ที่ทันสมัยเช่นนี้จากกรอบ React Component (ไม่เกี่ยวข้องกับ Bootstrap แต่สามารถรวมเข้ากับ Bootstrap grid และ UI ได้)

มีการใช้งานอื่น ๆ สำหรับ Angular, View หรือ jQuery

สวิตช์ 2018 ที่ทันสมัย

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

สวิตช์ Bootstrap ดั้งเดิม

ดูohkts11 ของคำตอบด้านล่างเกี่ยวกับพื้นเมือง Bootstrap สวิทช์


19
ฉันจะหลีกเลี่ยงสวิตช์เหล่านี้: ux.stackexchange.com/questions/1318/…
ckarbass

3
ไซต์นี้ไม่มีแล้ว
w3bMak3r

คุณพูดถูก @ w3bMak3r ชื่อโดเมนถูกเปลี่ยนแล้ว อัปเดตแล้ว
smonff

เป็นปลั๊กอินที่ดี ง่ายต่อการใช้. แต่มีปัญหากับซาฟารี 5.1.7 เมื่อฉันคลิกหนึ่งครั้งอีกครั้งหนึ่งกำลังเคลื่อนไหว ใครสามารถแก้ปัญหานี้ได้บ้าง
Sarower Jahan

2
Bootstrap Toggleเป็นอีกทางเลือกหนึ่งที่ใช้ bootstrap
Charles P.

58

หากคุณไม่คิดจะเปลี่ยน HTML ของคุณคุณสามารถใช้data-toggleแอตทริบิวต์บน<button>s ดูส่วนการสลับเดี่ยวของตัวอย่างปุ่ม :

<button type="button" class="btn btn-primary" data-toggle="button">
    Single toggle
</button>

1
มีวิธีที่จะมีช่องทำเครื่องหมายภายในในการสลับเพียงครั้งเดียวเหมือนกับในตัวเลือกช่องทำเครื่องหมาย / วิทยุหรือไม่?
Shimmy Weitzhandler

3
aria-pressed="true"สามารถใช้เพื่อตรวจสอบสถานะ
brauliobo

31

Bootstrap 3 มีตัวเลือกในการสร้างปุ่มสลับตามช่องทำเครื่องหมายหรือปุ่มตัวเลือก: http://getbootstrap.com/javascript/#buttons

ช่องทำเครื่องหมาย

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

ปุ่มตัวเลือก

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

เพื่อให้ใช้งานได้คุณต้องเริ่มต้น.btns ด้วย Javascript ของ Bootstrap:

$('.btn').button();

มีวิธีที่จะมีช่องทำเครื่องหมายภายในในการสลับเพียงครั้งเดียวเหมือนกับในตัวเลือกช่องทำเครื่องหมาย / วิทยุหรือไม่?
Shimmy Weitzhandler

@Shimmy: หากคุณใส่ช่องทำเครื่องหมายเดียวในกลุ่มปุ่มคุณจะได้รับพฤติกรรมเดียวกัน ฉันไม่ทราบวิธีการใช้งานแบบละเอียดน้อยกว่าในการสลับช่องทำเครื่องหมายเดียว
StriplingWarrior

7

ฉันพยายามเปิดใช้งานคลาส 'active' ด้วยตนเองด้วยจาวาสคริปต์ มันไม่สามารถใช้งานได้เหมือนกับไลบรารีที่สมบูรณ์ แต่สำหรับกรณีง่ายๆดูเหมือนจะเพียงพอ:

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

หากคุณคิดอย่างรอบคอบแล้ว bootstrap จะใช้คลาส 'active' เมื่อกดปุ่มไม่ใช่ก่อนหรือหลัง (กรณีของเรา) ดังนั้นจึงไม่มีข้อขัดแย้งในการนำคลาสเดียวกันมาใช้ซ้ำ

ลองใช้ตัวอย่างนี้และบอกฉันว่าล้มเหลว: http://jsbin.com/oYoSALI/1/edit?html,js,output


1
ฉันคิดว่าผู้ใช้ไม่ได้ถามเกี่ยวกับเรื่องนี้ แต่คำตอบของคุณเพียงแค่ตอบคำถามของฉัน!
tetri

ฉันคิดว่ามันน่าจะเป็นคำถามต่อไปของผู้ใช้อยู่ดี
eaglei22

5

หากคุณต้องการเก็บฐานรหัสขนาดเล็กและคุณจะต้องใช้ปุ่มสลับสำหรับส่วนเล็ก ๆ ของแอปพลิเคชันเท่านั้น ฉันขอแนะนำให้รักษารหัสจาวาสคริปต์ของคุณแทน (angularjs, javascript, jquery) และใช้ CSS ธรรมดา

ตัวสร้างปุ่มสลับที่ดี: https://proto.io/freebies/onoff/


3

นี่นี้มีประโยชน์มากสำหรับเงินทุนปุ่มสลับ ตัวอย่างในส่วนโค้ด !! และ jsfiddle ด้านล่าง

  <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>
ฉันแสดงให้คุณเห็นบางตัวอย่างข้างต้น ฉันหวังว่ามันจะช่วยได้ Js Fiddle อยู่ที่นี่ ซอร์สโค้ดสามารถใช้งานได้บน GitHub

อัปเดต 2020 สำหรับ Bootstrap 4

ฉันแนะนำbootstrap4-toggleในปี 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/popper.js@1.16.0/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/bootstrap4-toggle@3.6.1/css/bootstrap4-toggle.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/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>


สั้นและตรงประเด็นวิธีแก้ปัญหาที่ง่ายและรวดเร็วคุณทำให้วันของฉัน!
Mayer Spitzer

2

คุณสามารถใช้ไลบรารี CSS Toggle Switch เพียงใส่ CSS และตั้งโปรแกรม JS ด้วยตัวคุณเอง: http://ghinda.net/css-toggle-switch/bootstrap.html


1
แม้ว่าสิ่งนี้อาจตอบคำถามได้ แต่จะเป็นการดีกว่าที่จะให้ข้อมูลจริงที่นี่ไม่ใช่แค่ลิงก์ คำตอบการเชื่อมโยงอย่างเดียวไม่ถือว่าเป็นคำตอบที่ดีและอาจจะถูกลบ
elixenide

แต่นี่ไม่ใช่ลิงก์ไปยังคำอธิบาย มันเป็นลิงค์ไปยังห้องสมุดจริงซึ่งฉันเอ่ยชื่อในคำตอบของฉัน คุณต้องการให้ฉันโพสต์ซอร์สโค้ดห้องสมุดทั้งหมดที่นี่หรือไม่ คำตอบของฉันจะผิดก็ต่อเมื่อฉันพูดว่า "ใช้ไลบรารีนี้: [ลิงก์]" โดยไม่เอ่ยชื่อห้องสมุด แต่เนื่องจากฉันเอ่ยชื่อฉันคิดว่าคำตอบนั้นเหมาะสมเพราะถ้าลิงก์ไปไม่ถูกต้องเขา / เธอสามารถลองดาวน์โหลดห้องสมุดจากที่อื่นได้เนื่องจากชื่อเป็นที่รู้จัก
OMA

คุณไม่จำเป็นต้องโพสต์ซอร์สโค้ดของไลบรารีทั้งหมด แต่อย่างน้อยที่สุดคุณต้องให้ข้อมูลเชิงลึกเกี่ยวกับวิธีการใช้งาน "เพียงแค่รวม CSS และตั้งโปรแกรม JS ด้วยตัวคุณเอง" นั้นไม่มากและไม่น่าจะช่วย OP หรือผู้ใช้คนอื่น ๆ
elixenide

2
มันใช้งานง่ายจริงๆ! เพียงใส่หนึ่งในตัวอย่างโค้ด CSS จากนั้นตั้งโปรแกรม JS ด้วยสิ่งที่คุณต้องการทำ ฉันไม่สามารถแสดงความคิดเห็นเกี่ยวกับการเขียนโปรแกรม JS จริงเนื่องจากผู้โพสต์ต้นฉบับไม่ได้ขอให้ดำเนินการเฉพาะเมื่อใช้ปุ่มสลับฉันจะพูดอะไรเกี่ยวกับเรื่องนี้ได้อีก นอกจากนี้ทำไมคำตอบที่ยอมรับจึงถือว่าตกลง นอกจากนี้ยังเป็นคำตอบ "ลิงก์เท่านั้น"! (มันบอกแค่ว่า "ไม่แน่ใจว่ามันช่วยได้หรือเปล่า แต่มี Bootstrap Switch ที่ยอดเยี่ยม (ไม่เป็นทางการ) มันใช้วิทยุประเภทแม้ว่า") ทำไมคำตอบนั้นจึงตกลง? คุณไม่ได้แสดงความคิดเห็นเกี่ยวกับลักษณะลิงก์เท่านั้นที่นั่น
OMA



-1

ในกรณีที่ใครบางคนยังคงมองหาปุ่มสวิทช์ / สลับที่ดีฉันทำตามคำแนะนำของ Rick และสร้างคำสั่งเชิงมุมง่ายๆรอบ ๆสวิตช์เชิงมุมเชิงมุมสวิทช์นอกเหนือจากการเลือกใช้สวิตช์สไตล์ Windows แล้วการดาวน์โหลดทั้งหมดยังมีขนาดเล็กกว่ามาก (2kb เทียบกับ 23kb minified css + js) เมื่อเทียบกับ angular-bootstrap-switch และ bootstrap-switch ที่กล่าวถึงข้างต้นด้วยกัน

คุณจะใช้มันดังนี้ ขั้นแรกให้รวมไฟล์ js และ css ที่ต้องการ:

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

และเปิดใช้งานในแอปเชิงมุมของคุณ:

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

ตอนนี้คุณพร้อมใช้งานแล้วดังนี้:

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

ป้อนคำอธิบายภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.