【问题标题】:prev() gives value undefinedprev() 给出未定义的值
【发布时间】:2020-01-16 20:42:26
【问题描述】:

我正在更新购物车值,我想在其中增加或减少购物车项目的值,但是我没有得到 qty 值但未定义。我正在使用 jQuery 的 nextprev 方法来获取结果。

javascript:

$(document).ready(function() {
  $('.qtyplus').click(function(e) {
    var cart_id = $(this).attr('data-id');
    var product_id = $(this).attr('data-value');
    var qty = $(this).siblings('input[name="qty"]').val();

    alert(qty);

    e.preventDefault()
    
    $.ajaxSetup({
      headers: {
        'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
      }
    });
    
    jQuery.ajax({
      url: "{{ url('/increment') }}",
      method: 'get',
      data: {
        qty: qty,
        id: cart_id,
        product_id: product_id
      },
      success: function(result) {
        jQuery('#qty').val(result.qty);
        jQuery('#subtotal').val(result.subtotal);
      }
    });
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tr>
    <td data-th="Quantity">
      <div class="plus-minus" style="width:150px; ">
        <div class="input-group">
          <span class="input-group-btn">
            <button type="button" class="btn btn-default btn-number qtyminus" id="subs" data-id="<?php echo $v_contents->cart_id;?>" data-value="<?php echo $v_contents->product_id;?>">
              <span class="fa fa-minus"></span>
            </button>
          </span>
          <input type="text" id="qty" name="qty" class="form-control input-number" value="{{$v_contents->qty}}">
          <span class="input-group-btn">
            <button type="button" class="btn btn-default btn-number qtyplus" data-type="plus" data-id="<?php echo $v_contents->cart_id;?>" data-value="<?php echo $v_contents->product_id;?>">
              <span class="fa fa-plus"></span>
            </button>
          </span>
        </div>
      </div>
    </td>
  </tr>
</table>

【问题讨论】:

    标签: jquery


    【解决方案1】:

    试试这个:

    var t = 0;
    $(document).ready(function() {
    function total(){
    t=0;
    $("input[name='subtotal']").each(function (){
    t = t + this.value;
    });
    $("td.hidden-xs.text-center strong").html(`Total: ${t}`);
    }
      $(".qtyplus,.qtyminus").click(function (){
        var input = $(this).parent().parent().find("input[name^='qty']"); $(this).parent().parent().parent().next().find("input[name='subtotal']").val($(this).parent().parent().parent().parent().find("td[data-th^='Price']").text()*input.val());
    total();
    });
      $('span button').click(function(e) {
        var cart_id = $(this).attr('data-id');
        var product_id = $(this).attr('data-value');
        var qty = $(this).parent().parent().find("input[name^='qty']").val();
        var input = $(this).parent().parent().find("input[name^='qty']");
    
        $(this).parent().parent().find("input[name^='qty']").val(($(this).hasClass("qtyminus")) ? --qty : ++qty);
        e.preventDefault()
        
        $.ajaxSetup({
          headers: {
            'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
          }
        });
        
        jQuery.ajax({
          url: "{{ url('/increment') }}",
          method: 'get',
          data: {
            qty: qty,
            id: cart_id,
            product_id: product_id
          },
          success: function(result) {
            input.val(result.qty);
            jQuery('#subtotal').val(result.subtotal);
          }
        });
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <table id="cart" class="table table-hover table-condensed">
    				<thead>
    					<tr>
    						<th>Product</th>
    						<th>Price</th>
    						<th>Quantity</th>
    						<th class="text-center">Subtotal</th>
    						<th></th>
    					</tr>
    				</thead>
    				@foreach($getResult as $v_contents)
    				<tbody>
    					<tr>
    						<td data-th="Product">
    							<div class="row">
    								<div class="col-sm-4 hidden-xs"><img src="{{asset('images/'.$v_contents->image)}}" alt="..." class="img-responsive"/ height="100" width="100"></div>
    								<div class="col-sm-8">
    									<h4 class="nomargin">{{$v_contents->name_of_subcategory}}</h4>
    									<p>{{$v_contents->description_of_product}}</p>
    								</div>
    							</div>
    						</td>
    						<td data-th="Price">12</td>
    						<td data-th="Quantity">
    							<div class="plus-minus" style="width:150px; ">
    								<div class="input-group">
    									
    							          
    							              <button type="button" class="btn btn-default btn-number qtyminus" id="subs" data-id="<?php echo $v_contents->cart_id;?>" data-value="<?php echo $v_contents->product_id;?>">
    							                  <span class="fa fa-minus"></span>
    							              </button>
    							         
    							              <input type="text" id="qty" name="qty" class="form-control qty" value="{{$v_contents->qty}}" >
    												          
    							              <button type="button" class="btn btn-default btn-number qtyplus" data-type="plus" data-id="<?php echo $v_contents->cart_id;?>" data-value="<?php echo $v_contents->product_id;?>">
    							                  <span class="fa fa-plus"></span>
    							              </button>
    							          
    							      
    							    </div>
    							</div>								
    						</td>
    						<?php  $subtotal=$v_contents->price*$v_contents->qty; ?>
    						<td data-th="Subtotal" class="text-center">
    							<input type="text" id="subtotal" name="subtotal" class="form-control input-number" value="<?php echo $subtotal; ?>" min="1" max="10"></td>
    						<td class="actions" data-th="">
    							<a class="btn btn-danger btn-sm" href="{{ url('/delete-to-cart'.$v_contents->cart_id)}}"><i class="fa fa-trash-o"></i></a>								
    						</td>
    					</tr>
    				
    				</tbody>
    				<tfoot>
    					@endforeach
    					<!-- <tr class="visible-xs">
    						<td class="text-center"><strong>Total 1.99</strong></td>
    					</tr> -->
    					<tr>
    						<td><a href="#" class="btn btn-warning"><i class="fa fa-angle-left"></i> Continue Shopping</a></td>
    						<td colspan="2" class="hidden-xs"></td>
    						<td class="hidden-xs text-center"><strong>Total </strong></td>
    						<td><a href="https://www.paypal.com/webapps/shoppingcart?mfid=1546373779156_cb91e3a2b2dc7&flowlogging_id=cb91e3a2b2dc7#/checkout/shoppingCart" class="btn btn-success btn-block">Checkout <i class="fa fa-angle-right"></i></a></td>
    					</tr>
    				</tfoot>
    			</table>

    【讨论】:

    • 您好,现在我得到了正确的数量值,但是当我在购物车中添加多个商品并执行增量操作时,它只会增加购物车中第一个商品的数量。我认为这里需要改变成功的数量 id 将被覆盖
    • 你明白我的意思了吗?
    • 它返回假值。我想要 ajax 成功的数量。第一个购物车项目是正确的,但由于数量的 id 会重复,它不能用于下一个值
    • 对不起,我没有看到你的成功函数。你的#subtotal在哪里?
    • 你好现在忽略#subtotal,只想要qty plz解决非常紧迫的问题
    【解决方案2】:

    input[name="qty"] 不是您分配事件处理程序的.qtyplus 元素的同级元素。您需要遍历 DOM 到按钮的父级,因为它是兄弟元素:

    $(document).ready(function() {
      $('.qtyplus').click(function(e) {
        var cart_id = $(this).attr('data-id');
        var product_id = $(this).attr('data-value');
        var qty = $(this).parent().siblings('input[name="qty"]').val();
        
        console.log(qty);
        
        // the rest of your AJAX code...
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <table>
      <tr>
        <td data-th="Quantity">
          <div class="plus-minus" style="width:150px; ">
            <div class="input-group">
              <span class="input-group-btn">
                <button type="button" class="btn btn-default btn-number qtyminus" id="subs" data-id="<?php echo $v_contents->cart_id;?>" data-value="<?php echo $v_contents->product_id;?>">
                  <span class="fa fa-minus"></span>
                </button>
              </span>
              <input type="text" id="qty" name="qty" class="form-control input-number" value="{{$v_contents->qty}}">
              <span class="input-group-btn">
                <button type="button" class="btn btn-default btn-number qtyplus" data-type="plus" data-id="<?php echo $v_contents->cart_id;?>" data-value="<?php echo $v_contents->product_id;?>">
                  <span class="fa fa-plus"></span>
                </button>
              </span>
            </div>
          </div>
        </td>
      </tr>
    </table>

    【讨论】:

    • 您好,现在我得到了正确的数量值,但是当我在购物车中添加多个商品并执行增量操作时,它只会增加购物车中第一个商品的数量。我认为这里需要改变成功的数量 id 将被覆盖
    • 页面加载后元素是否动态添加到DOM中?如果是这样,您需要使用委托事件处理程序
    【解决方案3】:

    input[name="qty"] 不是.qtyplus 按钮的直接兄弟。 你需要使用$(this).parent().siblings('input[name="qty"]').val()

    $(document).ready(function() {
      $('.qtyplus').click(function(e) {
        var cart_id = $(this).attr('data-id');
        var product_id = $(this).attr('data-value');
        var qty = $(this).parent().siblings('input[name="qty"]').val();
    
        alert(qty);
    
        e.preventDefault()
        
        $.ajaxSetup({
          headers: {
            'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
          }
        });
        
        jQuery.ajax({
          url: "{{ url('/increment') }}",
          method: 'get',
          data: {
            qty: qty,
            id: cart_id,
            product_id: product_id
          },
          success: function(result) {
            jQuery('#qty').val(result.qty);
            jQuery('#subtotal').val(result.subtotal);
          }
        });
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <table>
      <tr>
        <td data-th="Quantity">
          <div class="plus-minus" style="width:150px; ">
            <div class="input-group">
              <span class="input-group-btn">
                <button type="button" class="btn btn-default btn-number qtyminus" id="subs" data-id="<?php echo $v_contents->cart_id;?>" data-value="<?php echo $v_contents->product_id;?>">
                  <span class="fa fa-minus"></span>
                </button>
              </span>
              <input type="text" id="qty" name="qty" class="form-control input-number" value="{{$v_contents->qty}}">
              <span class="input-group-btn">
                <button type="button" class="btn btn-default btn-number qtyplus" data-type="plus" data-id="<?php echo $v_contents->cart_id;?>" data-value="<?php echo $v_contents->product_id;?>">
                  <span class="fa fa-plus"></span>
                </button>
              </span>
            </div>
          </div>
        </td>
      </tr>
    </table>

    【讨论】:

    • 您好,现在我得到了正确的数量值,但是当我在购物车中添加多个商品并执行增量操作时,它只会增加购物车中第一个商品的数量。我认为这里需要改变成功的数量 id 将被覆盖
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多