【问题标题】:How to set next element values in jQuery如何在jQuery中设置下一个元素值
【发布时间】:2020-05-19 23:32:03
【问题描述】:

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

<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);
  }
});

我做错了什么?

【问题讨论】:

    标签: jquery next


    【解决方案1】:

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

    $(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">

    【讨论】:

      【解决方案2】:

      您的 .next() 元素实际上是 HTML 代码中的下一个元素,因此在您的情况下它是 &lt;span id="error_brand" class="show-error-msg"&gt;&lt;/span&gt;

      我修改了你的代码。 .find() 也排除了当前元素。因此,如果您在要查找的元素上运行它,它将找不到它。

      我稍微更新了你的 sn-p,只是添加了一个真正的按钮和一些内容。除此之外都是一样的。

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

      【讨论】:

        【解决方案3】:

        使用siblings() 代替next()

        在工作代码下运行-

        $(document).on('click','.myButtonClass',function(e){
          console.log($(this).closest(".search-id").length); // returning 0
          console.log($(this).siblings("input:hidden.search-id").val()); // returning undefined
          if($(this).siblings("input:hidden.search-id").length){
            var myval = $(this).siblings("input:hidden.search-id").val();
            console.log('Val -'+myval);
          }
        });
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <span id="clear_promotion_brand_search" class="myButtonClass">Click Here<i class="fa fa-times"></i></span>
        <span id="error_brand" class="show-error-msg"></span>
        <input type="hidden" name="promotion_brand_id" value="Hidden Input Value" data-id="brand" class="search-id is-validate form-fields-value">

        【讨论】:

          【解决方案4】:

          你可以使用$(this).next().next()函数来查找输入框。

          $(document).ready(function(){
             $(".myButtonClass").on('click',function(){
                $(this).next().next().val('Hello World')
             })
          })
          <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
          <span id="clear_promotion_brand_search" class="myButtonClass"><i class="fa fa-times">click me</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">

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-02-19
            • 1970-01-01
            • 2011-08-06
            • 1970-01-01
            • 2012-06-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多