【问题标题】:Custom input number in a foreach loopforeach 循环中的自定义输入数字
【发布时间】:2018-07-24 18:39:51
【问题描述】:

我为我的输入号码制作了一种新样式,效果很好。 我的问题是当我添加这是一个不起作用的 foreach 结构时。 我认为问题在于 ID 更改了值,但在 foreach 中所有输入都具有相同的 ID。

这是我在 foreach 中的代码:

    <div class='value-button' id='decrease' onclick='decreaseValue()' value='Decrease Value'>-</div>
                <input size='1' id='number' name='product[<?= $p->id ?>]' value='<?= $p->qty ?>' />
<div class='value-button' id='increase' onclick='increaseValue() 'value='Increase Value'>+</div>

这是js代码:

    function increaseValue() {
  var value = parseInt(document.getElementById('number').value, 10);
  value = isNaN(value) ? 0 : value;
  value++;
  document.getElementById('number').value = value;
}

function decreaseValue() {
  var value = parseInt(document.getElementById('number').value, 10);
  value = isNaN(value) ? 0 : value;
  value < 1 ? value = 1 : '';
  value--;
  document.getElementById('number').value = value;
}

我尝试提供唯一的 ID,但不起作用。如果我添加 &lt;?= $p-&gt;id ?&gt; 而不是 id number 这不起作用。

我该怎么办? 如果需要,我还可以更改输入的 html。

谢谢

这是我的最后一次测试:

<td class="qty">
      <div class="value-button" id="decrease" onclick="decreaseValue()" value="Decrease Value">-</div>
        <input size="1" id="92" name="product[92]" value="3">
      <div class="value-button" id="increase" onclick="increaseValue() " value="Increase Value">+</div>
      <script>
      function increaseValue() {
        var value = parseInt(document.getElementById('92').value);
        value = isNaN(value) ? 0 : value;
        value++;
        document.getElementById('92').value = value;
      }

      function decreaseValue() {
        var value = parseInt(document.getElementById('92').value);
        value = isNaN(value) ? 0 : value;
        value < 1 ? value = 1 : '';
        value--;
        document.getElementById('92').value = value;
      }
      </script>
    </td>

我尝试在 foreach 中添加 js,输入的 id 相同。但不起作用。

【问题讨论】:

  • 只是一个旁注,id 应该始终是唯一的
  • 我尝试在输入 id 和 js 中添加相同的 api = $p->id ?> 但不起作用。并将所有内容放在 foreach 循环中。但只工作最少的行
  • 你能用 var dump 或控制台记录数据并发布它。这将有助于编写代码以了解数据的结构。
  • 是的,现在添加我上次测试的输出。谢谢

标签: javascript php html input foreach


【解决方案1】:

您可以使用输入的 id 作为调用 increaseValuedecreaseValue 的参数。 id 属性应该是唯一的,您可以使用适当的前缀和产品编号/标识符。

也许您将属性的引用更改为",而不是'(这可能是给定样式指南的问题)。如果你这样做了,那么就始终保持相同的风格。您可以通过在 javascript 参数中使用其他未使用的引号来嵌套引号。

onclick="decreaseValue('product[<?= $p->id ?>]')"
        ^                                       ^  outer
                       ^                      ^    inner

function increaseValue(id) {
    var value = +document.getElementById(id).value || 0;
    value++;
    document.getElementById(id).value = value;
}

function decreaseValue(id) {
    var value = +document.getElementById(id).value || 0;
    value--;
    if (value < 1) {
        value = '';
    }
    document.getElementById(id).value = value;
}
<div class="value-button" onclick="decreaseValue('product[<?= $p->id ?>]')">-</div>
<input size="1" id="product[<?= $p->id ?>]" name="product[<?= $p->id ?>]" value="" />
<div class="value-button" onclick="increaseValue('product[<?= $p->id ?>]')">+</div>

【讨论】:

  • 谢谢,您的意思是在 (id) 中添加 = $p->id ?> ?在js和html中?
  • 如果这部分出现在实际'number' 所在的位置就足够了。
  • 如果我给document.getElementById(' &lt;?= $p-&gt;id ?&gt;').value(以及在 html id 和 onlick 中)只工作最后一行。
  • 请注意字符串中的空格。
  • 好的!抱歉,我没有很好地复制您的代码 :) 现在开始工作!我可以问你为什么你做了什么?谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 2022-01-08
  • 2021-09-13
  • 2018-09-21
相关资源
最近更新 更多