【问题标题】:Add 1 to a input value on click to checkbox in a php loop在 php 循环中单击复选框时将 1 添加到输入值
【发布时间】:2018-04-13 08:43:36
【问题描述】:

我想在选中复选框时为输入值添加 +1。我已经尝试过这段代码,但在 a 循环内不起作用。我需要在 php 循环中进行这项工作,因此,只需要在连接的输入上工作。

这是我的代码

<div class="mix ">

        <div class="img-card">
          <img src="<?= $product->image_card ?>">
        </div>
        <p><?= $product->sub_title; ?></p>
        <div class="azione">
          <p>
            Check
            <input type="checkbox" name="PRD-<?= $product->sub_title ?>" id="<?= $product->sub_title ?>" value="SI" />
          </p>
            <div class="quantity-form">
              <span class="input-holder-form"><span class="tiny-button-form plus">+</span>
                  <input class="contatore" type="number" min="0" name="QNT-<?= $product->sub_title ?>" value="0">
              <span class="tiny-button-form minus"><strong>–</strong></span>
          </div>
        </div>

给我这个html:

<div class="mix">

        <div class="img-card">
          <img src="...">
        </div>
        <p>P Name</p>
        <div class="azione">
          <p>
            Check
            <input type="checkbox" name="PRD-name" id="P-ID" value="SI">
          </p>
            <div class="quantity-form">
              <span class="input-holder-form"><span class="tiny-button-form plus">+</span><span class="tiny-button-form plus">+</span>
                  <input class="contatore" type="number" min="0" name="QNT-NIA - front desk" value="0">
              <span class="tiny-button-form minus"><strong>–</strong></span>
          <span class="tiny-button-form minus"><strong>–</strong></span></span></div>
        </div>
      </div>

这是我的 jQuery

$('input:checkbox').change(function(){
    if($(this).is(":checked")) {
        $(this).closest('.mix').addClass("checked");
        var $input = $('.mix.checked .contatore');
        var num = parseInt($input.val());
        var newNum = num + 1;
        $input.val(newNum);
    } else {
        $(this).closest('.mix').removeClass("checked");
        var $input = $('.mix .contatore');
        var num = parseInt($input.val());
        var newNum = num * 0;
        $input.val(newNum);
    }
});

当我单击复选框时,将输入数字加 1,当我单击复选框时,将归零。

但是如何让它只在连接的盒子上工作而不是在所有盒子上工作呢?

可能不必使用class checked,但我已经尝试使用closestfindchildrenparent

【问题讨论】:

  • 您的else 条件逻辑有点奇怪。它只会产生 0... 的值
  • 当您执行x * 0 时,它始终是= 0。因此,当您取消选中复选框时,它会归零。
  • 您只需要在每个复选框和输入字段中添加 id 或特定类。这比使用$('input:checkbox') 更容易
  • 在其他情况下,我认为他们只是感到困惑。你为什么不把零像这样$input.val(0); 在复选框的选中和取消选中尝试使用一些html属性。为每个框和输入字段添加具有递增值的 id 或类
  • 不能添加我的解决方案@MarcoRomano

标签: javascript php jquery html input


【解决方案1】:

假设您有多组重复元素,位置选择器可以工作。

您的代码中的问题具体是这一行:

var $input = $('.mix.checked .contatore');

该行忽略位置,并且应该只查看具有该类的 closest 元素,就像您查看该类上方的行一样。

此外,您在函数中重新声明了相同的变量。没必要那样做。我稍微清理了代码并修复了位置选择器。

您的示例代码中还缺少结束 &lt;/span&gt; 并且您发布的集合不超过 1 个,因此我必须自己制作重复集合,希望尽可能与您的匹配。

下面的代码分别处理每个集合,仅将 +1 添加到与同一集合中的复选框匹配的输入,而不是对所有输入添加 +1。

$('input:checkbox').change(function() {
  var $closestParent = $(this).closest('.mix'),
    $input = $closestParent.find('.contatore'),
    num = parseInt($input.val()),
    newNum

  if ($(this).is(":checked")) {
    $closestParent.addClass("checked");
    newNum = num + 1;
  } else {
    $closestParent.removeClass("checked");
    newNum = num * 0;
  }
  
  $input.val(newNum);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mix ">

  <div class="img-card">
    <img src="http://via.placeholder.com/15x15">
  </div>
  <p>
    Some Product Title
  </p>
  <div class="azione">
    <p>
      Check
      <input type="checkbox" name="someProduct1" id="someId1" value="SI" />
    </p>
    <div class="quantity-form">
      <span class="input-holder-form"><span class="tiny-button-form plus">+</span>
      <input class="contatore" type="number" min="0" name="someName1" value="0">
      <span class="tiny-button-form minus"><strong>–</strong></span></span>
    </div>
  </div>
</div>
<div class="mix ">

  <div class="img-card">
    <img src="http://via.placeholder.com/15x15">
  </div>
  <p>
    Some Product Title
  </p>
  <div class="azione">
    <p>
      Check
      <input type="checkbox" name="someProduct1" id="someId1" value="SI" />
    </p>
    <div class="quantity-form">
      <span class="input-holder-form"><span class="tiny-button-form plus">+</span>
      <input class="contatore" type="number" min="0" name="someName1" value="0">
      <span class="tiny-button-form minus"><strong>–</strong></span></span>
    </div>
  </div>
</div>

【讨论】:

  • 你的代码太棒了!我明白问题出在哪里,但我永远不会独自到达。谢谢您,我将研究您的解决方案以提高我的知识!再次感谢。 (关于 html,这里缺少一个 jquery 脚本,我在其中添加了 这是让 + - 起作用的部分。)
【解决方案2】:

这就是我在上面的评论中所说的。使用 id 和属性 data-id 来触发和选择正确的字段。使用递增的 id 并将其作为 data-id,这样您仍然可以在循环中使用计数器。

$('input:checkbox').change(function() {
  var idVal = $(this).data('id');
  var inputVal = parseInt($('#input_'+idVal).val());
  if ($(this).is(":checked")) {
    inputVal+=1;
    $('#input_'+idVal).val(inputVal);
  } else {

    $('#input_'+idVal).val(0);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mix ">

  <div class="img-card">
    <img src="http://via.placeholder.com/15x15">
  </div>
  <p>
    Some Product Title
  </p>
  <div class="azione">
    <p>
      Check
      <input type="checkbox" name="someProduct1" id="someId1" value="SI" data-id="1"/>
    </p>
    <div class="quantity-form">
      <span class="input-holder-form"><span class="tiny-button-form plus">+</span>
      <input class="contatore" id="input_1" type="number" min="0" name="someName1" value="0">
      <span class="tiny-button-form minus"><strong>–</strong></span></span>
    </div>
  </div>
</div>
<div class="mix ">

  <div class="img-card">
    <img src="http://via.placeholder.com/15x15">
  </div>
  <p>
    Some Product Title
  </p>
  <div class="azione">
    <p>
      Check
      <input type="checkbox" name="someProduct2" id="someId2" data-id="2" value="SI" />
    </p>
    <div class="quantity-form">
      <span class="input-holder-form"><span class="tiny-button-form plus">+</span>
      <input class="contatore" id="input_2" type="number" min="0" name="someName2" value="0">
      <span class="tiny-button-form minus"><strong>–</strong></span></span>
    </div>
  </div>
</div>

<div class="mix ">

  <div class="img-card">
    <img src="http://via.placeholder.com/15x15">
  </div>
  <p>
    Some Product Title
  </p>
  <div class="azione">
    <p>
      Check
      <input type="checkbox" name="someProduct3" id="someId3" data-id="3" value="SI" />
    </p>
    <div class="quantity-form">
      <span class="input-holder-form"><span class="tiny-button-form plus">+</span>
      <input class="contatore" id="input_3" type="number" min="0" name="someName3" value="0">
      <span class="tiny-button-form minus"><strong>–</strong></span></span>
    </div>
  </div>
</div>

【讨论】:

  • 感谢您的重新申请,我链接您的解决方案。但老实说更喜欢另一个,因为我不知道如何在 php 循环中添加 data-id 渐进式。不过谢谢。
  • 欢迎。更清晰的示例data-id="&lt;?php echo $ctr; ?&gt;" id="someId&lt;?php echo $ctr; ?&gt;"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多