将.stepUp()与JQuery一起使用会返回错误“ .stepUp不是函数”

时间:2020-01-08 13:58:41

标签: jquery

我有以下代码:

在此处查看有关代码笔的示例:https://codepen.io/Rubenkretek/pen/VwYQVgO?editors=1111

预期结果: 单击“ +”按钮时,输入字段将增加1。

实际结果: 输入没有更改,并出现以下错误:

TypeError:selectedInput.stepUp不是函数

$(function() {

  $('<span class="add" uk-icon="plus">+</span>').insertAfter('.product-container .product-quantity input');
  $('<span class="sub" uk-icon="minus">-</span>').insertBefore('.product-container .product-quantity input');


  $('.add').click(function() {

    var selectedInput = $(this).prev('input');

    if (selectedInput.val() < 10) {
      console.log("value is less than 10");
      $('.add').click(function() {
        selectedInput.stepUp(1);
      });
    }

  });


});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="product-container">
  <div class="product-info">
    <h2>Product name</h2>
  </div>
  <div class="product-quantity">
    <input type="number"></input>
  </div>
</div>

1 个答案:

答案 0 :(得分:4)

您正在嵌套事件处理程序。只有一个人并委托

stepUp也是DOM方法,因此您需要从jQuery中获取DOM元素(将[0]添加到该元素)

注意:type = number具有自己的微调控件

$(function() {

  $('<span class="add" uk-icon="plus">+</span>').insertAfter('.product-container .product-quantity input');
  $('<span class="sub" uk-icon="minus">-</span>').insertBefore('.product-container .product-quantity input');

  $('.product-quantity').on("click", '.add, .sub', function() {
    const selectedInput = $(this).closest('div').find('input')[0]; // stepUp is a DOM method
    let dir = $(this).is(".add");
    selectedInput.stepUp(dir ? 1 : -1);
    if (selectedInput.value < 10) {
      console.log("value is less than 10");
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="product-container">
  <div class="product-info">
    <h2>Product name</h2>
  </div>
  <div class="product-quantity">
    <input type="number" />
  </div>
</div>