基于类 + 数据属性的按钮不均衡



我正在为电子商务购物车编写一个带有-+按钮的<input type="number">

每个组的结构为:

  • 1x <button class="minus" data-prod="prod_id_int">
  • 1x <input type="number" id="prod_id_int">
  • 1x <button class="plus" data-prod="prod_id_int">

我现在要做的是禁用按钮-输入类型编号的值是否为 < 1 .

为了实现它,根据我的脚本,我必须禁用的不是一般<button class="minus">而是特定的<button class="minus" data-prod="prod_id_int">。我试过这个

$(buttonClass).data('prod', dataProd).prop('disabled', true);

它实际上可以防止< 1数量,但它并没有真正将属性disabled添加到按钮。那么,我不确定这是正确的方式。有人可以解释我如何实现它吗?

这里是工作片段

$(document).ready(function() {
  $('button').on('click', function() {
    var buttonClass = $(this).attr('class');
    //console.log(buttonClass);
    var buttonID = $(this).attr('id');
    //console.log(buttonID);
    var dataProd = $(this).data('prod');
    var inputToChange = $('#' + dataProd);
    var inputToChangeValue = $('#' + dataProd).val();
    if (buttonClass == 'minus') {
      var newValue = parseInt(inputToChangeValue) - parseInt(1);
      if (newValue < 1) {
        $(buttonClass).data('prod', dataProd).prop('disabled', true);
        //$(buttonClass).data('prod="' + dataProd + '"').prop('disabled', true);
        //$(buttonClass + '.[data-prod="' + dataProd + '"]').attr(disabled=disabled); //.prop('disabled', true)
        //alert('NOPE');
      } else {
        $('#' + dataProd).val(newValue);
        //console.log(inputToChangeValue);
      }
    } else if (buttonClass == 'plus') {
      var newValue = parseInt(inputToChangeValue) + parseInt(1);
      if (newValue > 99) {
        alert('NOPPPPEE');
      } else {
        $('#' + dataProd).val(newValue);
        console.log(inputToChangeValue);
      }
    }
  });
});
.plus,
.minus {
  width: 1.5%;
  height: auto;
  background-color: #EF1B1F;
  border-radius: 50%;
  text-align: center;
  display: inline-block;
  cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="minus" data-prod="23">-</button>
<input type="number" class="qta" id="23" value="5">
<button class="plus" data-prod="23">+</button>
<br>
<button class="minus" data-prod="90">-</button>
<input type="number" class="qta" id="90" value="62">
<button class="plus" data-prod="90">+</button>

这是解决方案。

$('.'+buttonClass).data('prod', dataProd).prop('disabled', true);

您所需要的只是将符号concatenate .到您的班级中。

buttonClass只返回className,比如minus,你需要jquery selector,像这样: $('.minus')

另外,我建议您使用这个:var newValue = --inputToChangeValue;用于减少值的简单方法,而不是var newValue = parseInt(inputToChangeValue) - parseInt(1);

$(document).ready(function() {
  $('button').on('click', function() {
    var buttonClass = $(this).attr('class');
    //console.log(buttonClass);
    var buttonID = $(this).attr('id');
    //console.log(buttonID);
    var dataProd = $(this).data('prod');
    var inputToChange = $('#' + dataProd);
    var inputToChangeValue = $('#' + dataProd).val();
    if (buttonClass == 'minus') {
      var newValue = --inputToChangeValue;
      if (newValue < 1) {
        $('.'+buttonClass).filter(function() { 
            return $(this).data("prod") == dataProd 
          }).prop('disabled', true);
        //$(buttonClass).data('prod="' + dataProd + '"').prop('disabled', true);
        //$(buttonClass + '.[data-prod="' + dataProd + '"]').attr(disabled=disabled); //.prop('disabled', true)
        //alert('NOPE');
      } else {
        $('#' + dataProd).val(newValue);
        //console.log(inputToChangeValue);
      }
    } else if (buttonClass == 'plus') {
      var newValue = parseInt(inputToChangeValue) + parseInt(1);
      $('.minus').filter(function() { 
            return $(this).data("prod") == dataProd 
          }).prop('disabled', false);
      if (newValue > 99) {
        alert('NOPPPPEE');
      } else {
        $('#' + dataProd).val(newValue);
        console.log(inputToChangeValue);
      }
    }
  });
});
.plus,
.minus {
  width: 10%;
  height: auto;
  background-color: #EF1B1F;
  border-radius: 50%;
  text-align: center;
  display: inline-block;
  cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="minus" data-prod="23">-</button>
<input type="number" class="qta" id="23" value="5">
<button class="plus" data-prod="23">+</button>
<br>
<button class="minus" data-prod="90">-</button>
<input type="number" class="qta" id="90" value="12">
<button class="plus" data-prod="90">+</button>

最新更新