javascript - 递增/递减 jQuery 影响错误输入

标签 javascript jquery

我对 JavaScript 有点陌生。我尝试编写一些简单的代码来增加和减少购物车中的产品。这是 fiddle :

https://jsfiddle.net/spadez/q9umfz8a/1/

HTML

<header>
  <nav>
    <ul>
      <li>A</li>
      <li class="active">B</li>
    </ul>
  </nav>
</header>
<main>
  <nav>
    <form>
      <h2>
Per Day
      </h2>
      <input type="radio" name="qty" value="5">5
      <input type="radio" name="qty" value="6">6
      <h2>
Days
</h2>
      <input type="radio" name="days" value="1">1
      <input type="radio" name="days" value="3">3
      <input type="radio" name="days" value="5">5
      <h2>
      Items
      </h2>
      <label>Apple</label>
      <img src="">
      <input value="0" class="number">
      <button class="decrement">-</button>
      <button class="increment">+</button>
      <label>Lemon</label>
      <img src="">
      <input value="0" class="number">
      <button class="decrement">-</button>
      <button class="increment">+</button>
    </form>
  </nav>
</main>

JS

$(document).ready(function() {
  $(".increment").click(function() {
    event.preventDefault();
    var $n = $(".number");
    $n.val(Number($n.val()) + 1);
  });
  $(".decrement").click(function() {
    event.preventDefault();
    var $n = $(".number");
    $n.val(Number($n.val()) - 1);
  });
});

如何让它影响按钮旁边的输入框?此外,我知道这可能是一个糟糕的方法 - 我怎样才能做得更好?

最佳答案

首先,您的函数中有 event.preventDefault(); 但您从未真正设置事件(因此默认操作实际上并未被阻止),但这甚至不是必需的;您可以简单地将按钮设置为“按钮”类型,如下所示:

<button type="button" class="decrement">-</button>
<button type="button" class="increment">+</button>

如果您希望阻止默认操作,您只需像这样设置事件:

$(".increment").click(function(event) { 
    //function code 
});

其次,选择器 $('.number') 选择器不明确,导致按下递增或递减按钮时两个输入都会受到影响,解决方案如下:

var $n = $(this).prevAll(".number:first");

这将导致仅选择前一个 $('.number')

这是所有的 Javascript

$(document).ready(function() {

  $(".increment").click(function() {
    var $n = $(this).prevAll(".number:first");
    $n.val(Number($n.val()) + 1);
  });

  $(".decrement").click(function() {
    var $n = $(this).prevAll(".number:first");
    $n.val(Number($n.val()) - 1);
  });

});

这是一个工作 fiddle :

https://jsfiddle.net/q9umfz8a/2/

另一种选择是使用 HTML5 输入类型“number”,其功能非常相似

<input type="number" value="0" class="number">

关于javascript - 递增/递减 jQuery 影响错误输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36770024/

相关文章:

javascript - CSS::contenteditable 中元素的焦点

javascript - 如何在 AngularJS ng-click(或 ng-change,...)中调用服务函数?

javascript - 在 Javascript 中从 URL 获取整数

jquery - 我希望每当检查单选元素的一个选项时都会触发一个函数。如何使用 Jquery 做到这一点?

javascript - 在 JavaScript 中使用 setInterval 更新文本字段

javascript - Laravel 分页将问题与设计联系起来

javascript - 单击按钮时将 div 元素添加到数组

javascript - 滚动到加载 div 上的重要 li,例如 li class ="importants"

php - 在 jQuery 链接上运行 SQL 查询

php - 如何将用户从下拉选择框列表中选择的选项的值存储到 mysql 数据库中?