【问题标题】:Bootstrap 4 toggle buttonBootstrap 4 切换按钮
【发布时间】:2016-07-22 06:10:15
【问题描述】:

我正在构建一个简单的车辆检查表单,我想使用复选框作为按钮来捕获true/false 值。

使用Bootstrap 4 应该是微不足道的。

不过,我想调整按钮的默认行为; successdanger 类之间切换以表示true/false 在某些情况下还可以更改按钮的文本,例如。 “泄漏”->“无泄漏”。

  1. 我在@Yass 的帮助下使切换开关正常工作,但在提交表单时我没有得到正确的true/false 值。即使复选框被选中 (true),值也会像 false 一样通过。

  2. 我不确定在两种状态之间切换时如何处理文本的变化。

复选框按钮

HTML

<div class="row">
    <div class="col-sm-4 col-xs-12">
        <p class="font-weight-bold">Bonnet</p>
        <div data-toggle="buttons">
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="oil" checked="checked" autocomplete="off"> Oil
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="coolant" checked="checked" autocomplete="off"> Coolant
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="breakfluid" checked="checked" autocomplete="off"> Break Fluid
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="screenwash" checked="checked" autocomplete="off"> Screen Wash
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="noleaks" checked="checked" autocomplete="off"> No Leaks
            </label>
        </div>
    </div>
    <div class="col-sm-4 col-xs-12">
        <p class="font-weight-bold">Outside</p>
        <div data-toggle="buttons">
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="tyres" checked="checked" autocomplete="off">
                Tyres
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="wiperblades" checked="checked" autocomplete="off">
                Wiper Blades
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="lights" checked="checked" autocomplete="off">
                Lights
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="indicators" checked="checked" autocomplete="off">
                Indicators
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="outcleanliness" checked="checked" autocomplete="off">
                Cleanliness
            </label>
        </div>
    </div>
    <div class="col-sm-4 col-xs-12">
        <p class="font-weight-bold">Inside</p>
        <div data-toggle="buttons">
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="horn" checked="checked" autocomplete="off">
                Horn
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="breaks" checked="checked" autocomplete="off">
                Breaks/Handbrake
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="seatbelt" checked="checked" autocomplete="off">
                Seatbelt
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="windscreen" checked="checked" autocomplete="off">
                Windscreen
            </label>
            <label class="btn btn-block btn-success">
                <input type="checkbox" name="incleanliness" checked="checked" autocomplete="off">
                Cleanliness
            </label>
        </div>
    </div>
</div>

JavaScript

$('label.btn').on('click', function() {
    //Find the child check box.
    var $input = $(this).find('input');

    $(this).toggleClass('btn-danger btn-success');
    //Remove the attribute if the button is "disabled"
    if ($(this).hasClass('btn-danger')) {
        $input.removeAttr('checked');
    } else {
        $input.attr('checked', '');
    }

    return false; //Click event is triggered twice and this prevents re-toggling of classes
});

https://jsfiddle.net/mstnorris/9fyzfu8w/

【问题讨论】:

  • 一个活生生的例子来说明你到目前为止所拥有的东西会有所帮助。如果这不可能,您的 html 布局和 css 怎么样?
  • @Yass 我已经更新了我原来的问题以增加清晰度。谢谢。

标签: javascript jquery twitter-bootstrap toggle bootstrap-4


【解决方案1】:

这是一个纯 Javascript 的替代解决方案。添加与每个按钮关联的隐藏输入,并在每次单击按钮时更新隐藏值。

HTML:

<!-- Visible button -->
<input onclick="toogleButton(this,'hiddenButton')" class="btn btn-secondary" type="button" value="Toogle">
<!-- Hidden input -->
<input name="FM_city" id="hiddenButton" type="hidden" value="0"></input>

Javascript:

// Called when the button is clicked
function toogleButton(callingElement,hiddenElement)
{
    // Check the color of the button
    if (callingElement.classList.contains('btn-secondary'))
    {
        // If the button is 'unset'; change color and update hidden element to 1
        callingElement.classList.remove('btn-secondary');
        callingElement.classList.add('btn-success');
        document.getElementById(hiddenElement).value="1";
    }
    else 
    {
        // If the button is 'set'; change color and update hidden element to 0
        callingElement.classList.remove('btn-success');
        callingElement.classList.add('btn-secondary');
        document.getElementById(hiddenElement).value="0";
    }
}

提交表单时,处理隐藏输入的值。请注意,您可以使用以下命令轻松更改按钮的文本:callingElement.value="New text here" 最后说明:隐藏元素的初始值必须与关联按钮的初始颜色一致。

【讨论】:

    【解决方案2】:

    处理按钮的单击事件,并使用 jQuery .prop() 像这样切换输入的检查值..

    var $chk = $(this).find('[type=checkbox]');
    $chk.prop('checked',!$chk.prop('checked'));
    

    演示:http://codeply.com/go/IeuO1fPf7H

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 2021-06-11
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 2022-11-10
      相关资源
      最近更新 更多