【问题标题】:Using .stepUp() with JQuery returns error ".stepUp is not a function"将 .stepUp() 与 JQuery 一起使用会返回错误“.stepUp 不是函数”
【发布时间】:2020-01-08 13:58:41
【问题描述】:

我有以下代码:

在此处查看 codepen 示例: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>

【问题讨论】:

  • 您有嵌套的事件处理程序。只有点击事件处理程序并委托它
  • 是否有理由在同一个元素上拥有多个点击处理程序?

标签: jquery


【解决方案1】:

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

stepUp 也是一个 DOM 方法,所以你需要从 jQuery 中获取 DOM 元素(将 [0] 添加到元素中)

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

更新:我意识到在查看问题时,div 中可能会有多个 qty 字段

$(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() {
    let dir = $(this).is(".add");
    // use bracket notation to get .prev() or .next() 
    // and then [0] to get the DOM element because stepUp is a DOM method
    const selectedInput = $(this)[dir ? "prev" : "next"]()[0]; 
    let val = +selectedInput.value || 0;
    const min = +selectedInput.min;
    const max = +selectedInput.max;
    if ((dir && val < 10) ||
      (!dir && val > 0)) {
      selectedInput.stepUp(dir ? 1 : -1);
    } else console.log("Value needs to be between", min, " and ", max)
  });
});
[type=number] {
  width: 30px;
}
<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" min="0" max="10" value="0" /><br />
    <input type="number" min="0" max="5" value="0" /><br />
  </div>
</div>

【讨论】:

  • 谢谢,有两个事件处理程序是一个错误,我已经修复了它,唯一让它工作的方法是将selectedInput.stepUp(1);更改为selectedInput[0].stepUp(1);。你能解释一下为什么会这样吗?
  • 是的,就像我在上面的评论中所做的那样,在find('input')[0]; 之后。它是 DOM 表示。 jQuery中没有stepUp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
  • 2020-11-28
  • 2017-05-10
  • 2023-02-15
  • 1970-01-01
  • 2015-01-07
相关资源
最近更新 更多