首页 > 解决方案 > 如何在jQuery中设置下一个元素值

问题描述

我有一个按钮,在单击事件上我需要设置下一个输入隐藏类型元素的值。我正在尝试下面的代码 -

<span id="clear_promotion_brand_search" class="myButtonClass"><i class="fa fa-times"></i></span>
<span id="error_brand" class="show-error-msg"></span>
<input type="hidden" name="promotion_brand_id" value="" data-id="brand" class="search-id is-validate form-fields-value">

$(document).on('click','.myButtonClass',function(e){
  console.log($(this).closest(".search-id").length); // returning 0
  console.log($(this).next(".search-id").val()); // returning undefined
  if($(this).next(".search-id").length){
    var myval = $(this).next(".search-id").find('input[type=hidden]').val();
    console.log('Val -'+myval);
  }
});

我究竟做错了什么?

标签: jquerynext

解决方案


您可以使用nextUntilandnext来获取所需的输入值,如下面的代码所示

$(function(){
  $(document).on('click','.myButtonClass',function(e){
    var input = $(this).nextUntil(".search-id").next();
    console.log(input.length);
    console.log("value = " + $(input).val());
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span id="clear_promotion_brand_search" class="myButtonClass">Button<i class="fa fa-times"></i></span>
<span id="error_brand" class="show-error-msg">Error</span>
<input type="hidden" name="promotion_brand_id" value="Test Value" data-id="brand" class="search-id is-validate form-fields-value">

或者您可以nextAll:first选择器一起使用

 $(function(){
      $(document).on('click','.myButtonClass',function(e){
        var input = $(this).nextAll(".search-id:first");
        console.log(input.length);
        console.log("value = " + $(input).val());
      });
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <span id="clear_promotion_brand_search" class="myButtonClass">Button<i class="fa fa-times"></i></span>
    <span id="error_brand" class="show-error-msg">Error</span>
    <input type="hidden" name="promotion_brand_id" value="Test Value" data-id="brand" class="search-id is-validate form-fields-value">


推荐阅读