【问题标题】:Detect when button is clicked in div with jQuery使用jQuery检测何时在div中单击按钮
【发布时间】:2021-08-31 22:01:23
【问题描述】:

我想检测何时单击 div 中的按钮,该 div 具有多个按钮,这些按钮的作用类似于移动优化应用程序的复选框。

这就是我所拥有的 HTML:

当它只是普通的复选框而不是像复选框这样的按钮时,我能够使用这个脚本实现我想要的:

$(document).on('change', 'input:checkbox.modifier', function () {
            var totalChecked = $("#modifiersDiv :checkbox:checked").size();
            var maximum = parseInt($('#Maximum').val());
            if (totalChecked === maximum) {
                $("#modifiersDiv :checkbox:not(:checked)").attr("disabled", true);
            } else {
                $("#modifiersDiv :checkbox:not(:checked)").attr("disabled", false);
            }
        });

现在我正在尝试这样的事情,只是为了看看该功能是否会被触发但没有成功:

 $(document).on('click', 'input:button.modifier', function () {
                   });

底线是我想在选择 5 个按钮时使用 jQuery 进行检测,然后我需要禁用 div 中的其他按钮,直到用户不会取消选择某些按钮。

更新

我用于按钮的代码:

var startDiv = "<div class='btn-group btn-block' data-toggle='buttons'>";
                            var checkBox = '';
                            $.each(data.modifierOptions, function(key, item) {
                                    checkBox += "<label class='btn btn-checkbox btn-block' style='margin-bottom:2px;'><input type='checkbox' data-quantity='1' class='modifier' data-itemid='" + itemid + "' data-name='" + item.Name + "' data-price='" + item.Price + "' name='" + item.Name + "' value='" + item.ID + "'/>" + item.Name + " </label><br />";
                            });
                            var endDiv = "</div>";
                            var totalDiv = startDiv + checkBox + endDiv;
                            $(totalDiv).appendTo('#modifiersDiv');

【问题讨论】:

  • 在您向我们展示的 HTML 中,我没有看到任何 input 类型为 button。你能给我们你正在处理的 HTML 吗?另外我的猜测是,您可能正在使用 Boostrap 在您的代码中添加一个 input type button 作为复选框,是吗?
  • 你能显示按钮元素的代码吗?
  • 为按钮元素添加了代码。 @rorofromfrance,是的,我正在使用引导程序,谢谢
  • 您添加的代码仍然使用input w/ type checkbox .. 那么您为什么要将点击事件绑定到input:button 呢?
  • 为了能够选择最多 n 个值的多个选项,请检查屏幕截图 i.gyazo.com/ee6388f8d84ff42f8ae72be9535b88bf.png 例如,如果单击了 5 个按钮,我希望禁用该 div 中的其余按钮 @ 987654322@

标签: javascript html jquery jquery-ui jquery-events


【解决方案1】:

我阅读了您的问题,您的尝试并不遥远。我整理了一支笔来演示如何做到这一点:http://codepen.io/aecend/pen/mjklu

复选框输入不会被按钮元素替换,标签只是被设置样式,以便它们看起来像按钮。在 jQuery 中,您仍然需要使用复选框选择器,而不是禁用复选框本身(没有意义,它们是隐藏的),只需在选择五个选项后将“禁用”类添加到其他标签。

这是我使用的 HTML,我只添加了 btn-default 类以使按钮更可见:

<html>
<head>
    <meta charset="utf-8">
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css">
    <script src="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
    <title>Hamburger Builder v2.0</title>
</head>
<body class="sitecolor">

<div id="modifiersDiv" class="modal-div" style="width: 250px; margin: 0 auto;">
    You can select a maximum of 5 option(s)
    <br>
    <div class="btn-group btn-block" data-toggle="buttons">
        <label class="btn btn-default btn-checkbox btn-block" style="margin-bottom: 2px;">
            <input class="modifier" type="checkbox" value="67739" name="Bacon" data-price="1" data-name="Bacon" data-itemid="a4007375-e037-46ce-be39-57ca2d1872e0" data-quantity="1">
            Bacon
        </label>
        <br>
        <label class="btn btn-default btn-checkbox btn-block" style="margin-bottom: 2px;">
            <input class="modifier" type="checkbox" value="67740" name="Lettuce" data-price="1" data-name="Lettuce" data-itemid="a4007375-e037-46ce-be39-57ca2d1872e1" data-quantity="1">
            Lettuce
        </label>
        <br>
        <label class="btn btn-default btn-checkbox btn-block" style="margin-bottom: 2px;">
            <input class="modifier" type="checkbox" value="67741" name="Tomato" data-price="1" data-name="Tomato" data-itemid="a4007375-e037-46ce-be39-57ca2d1872e2" data-quantity="1">
            Tomato
        </label>
        <br>
        <label class="btn btn-default btn-checkbox btn-block" style="margin-bottom: 2px;">
            <input class="modifier" type="checkbox" value="67742" name="Cheese" data-price="1" data-name="Cheese" data-itemid="a4007375-e037-46ce-be39-57ca2d1872e3" data-quantity="1">
            Cheese
        </label>
        <br>
        <label class="btn btn-default btn-checkbox btn-block" style="margin-bottom: 2px;">
            <input class="modifier" type="checkbox" value="67743" name="Onions" data-price="1" data-name="Onions" data-itemid="a4007375-e037-46ce-be39-57ca2d1872e4" data-quantity="1">
            Onions
        </label>
        <br>
        <label class="btn btn-default btn-checkbox btn-block" style="margin-bottom: 2px;">
            <input class="modifier" type="checkbox" value="67744" name="Pickles" data-price="1" data-name="Pickles" data-itemid="a4007375-e037-46ce-be39-57ca2d1872e5" data-quantity="1">
            Pickles
        </label>
        <br>
    </div>
</div>
</body>

这里是你需要的 JavaScript 的 sn-p,它几乎就是你所拥有的,除了现在可以使用 Bootstrap:

$(document).on('change', 'input:checkbox.modifier', function () {
    var totalChecked = $("#modifiersDiv :checkbox:checked").size();
    var maximum = 5; //parseInt($('#Maximum').val())
    if (totalChecked === maximum) {
        $(this).parent().siblings(":not(.active)").addClass("disabled");
    } else {
        $("#modifiersDiv label.disabled").removeClass("disabled");
    }
});

【讨论】:

    【解决方案2】:

    为选定的按钮添加一个类,并在每次点击时计算当时检查的按钮数量:

    $(".button:not(.selected)").click(function(){
       $(this).addClass("selected");
       if($(".button.select").length>4){
          $(".button").addClass("disabled");
       }
    }
    

    您可能想要添加一些内容,一旦单击两次按钮,该按钮也会取消选择...

    【讨论】:

      【解决方案3】:

      试试这个:))))

      var count=0;
      $("#modifiersDiv").find(".modifier").click(function(){
      
         if($(this).is(":checked")){
          count++;
         }else{
          count--;
        }  
      
        if(count>=$('#Maximum').val())
         $("#modifiersDiv").find(".modifier").not(':checked').attr("disabled", true);
        else    
         $("#modifiersDiv").find(".modifier").not(':checked').attr("disabled", false);
        });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-23
        • 1970-01-01
        • 1970-01-01
        • 2015-05-09
        • 1970-01-01
        • 2016-08-29
        相关资源
        最近更新 更多