【问题标题】:Set first radio button check and get value in jquery设置第一个单选按钮检查并在 jquery 中获取值
【发布时间】:2020-01-20 05:13:31
【问题描述】:

我有 3 个单选按钮,我试图设置第一个单选按钮检查,我做到了,但默认情况下检查第一个按钮我没有得到价值。为此,我尝试了.trigger('change).click(),但没有成功。

这是我的按钮截图:

如果我点击它,那么我会获得价值,否则它不会给他带来价值。

谁能告诉我我在做什么错?

$(document).ready(function() {
  $('.package_validity_child').each(function() {
    $("input[name='plan_name_selector']", this).get(0).checked = true;
  }).trigger('change');

  $('.plan_name').change(function() {
    var plan_name = $(".selected_plan_name").val();
    if (plan_name === 'Daily') {
      $('.days_names').css('display', 'none');
      $('.select_days').css('display', 'none');
    } else {
      $('.days_names').css('display', 'block');
      $('.select_days').css('display', 'block');
    }
  });

  $("input[name='plan_name_selector']").click(function() {
    var value = $("input[name='plan_name_selector']:checked").val();
    $('.selected_plan_name').val(value);
    $('.selected_plan_nameVal').html("You have chosen <b>" + value + "</b> validity.");
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="package_validity_child">
  <div class="custom-control custom-radio custom-control-inline">
    <input type="radio" class="custom-control-input plan_name" id="daily" name="plan_name_selector" value="Daily">
    <label class="custom-control-label" for="daily">Daily</label>
  </div>
  <div class="custom-control custom-radio custom-control-inline">
    <input type="radio" class="custom-control-input plan_name" id="weekly" name="plan_name_selector" value="Weekly">
    <label class="custom-control-label" for="weekly">Weekly</label>
  </div>
  <div class="custom-control custom-radio custom-control-inline">
    <input type="radio" class="custom-control-input plan_name" id="monthly" name="plan_name_selector" value="Monthly">
    <label class="custom-control-label" for="monthly">Monthly</label>
  </div>
  <input type="" name="plan_name" class="form-control ml-4 mt-2 w-50 selected_plan_name" />
</div>

【问题讨论】:

    标签: javascript php jquery jquery-ui jquery-events


    【解决方案1】:

    如上所述,您应该在初始 checkbox 操作之后添加函数调用。我建议你创建一个单独的函数并调用它来做你的事情。此外,只有一个 change 处理程序来满足您的所有需求,而无需额外的 click 处理程序,这可能会非常有用。您应该尝试使用 jQuery 函数 toggle,它与 display: none/bock; 具有相同的功能,但方式更简单。

    $(document).ready(function() {
      $('.package_validity_child').each(function() {
        const $firstCb = $(this).find("input[name='plan_name_selector']").first();
        $firstCb.prop('checked', true);
        showValue($firstCb.val());
      });
    
      $('.plan_name').on('change', function() {
        const hideDays = $(this).val() !== 'Daily';
        $('.days_names').toggle(hideDays);
        $('.select_days').toggle(hideDays);
    
        showValue($(this).val());
      });
    
      function showValue(value) {
        $('.selected_plan_name').val(value).html("You have choosed <b>" + value + "</b> validity.");
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="package_validity_child">
      <div class="custom-control custom-radio custom-control-inline">
        <input type="radio" class="custom-control-input plan_name" id="daily" name="plan_name_selector" value="Daily">
        <label class="custom-control-label" for="daily">Daily</label>
      </div>
      <div class="custom-control custom-radio custom-control-inline">
        <input type="radio" class="custom-control-input plan_name" id="weekly" name="plan_name_selector" value="Weekly">
        <label class="custom-control-label" for="weekly">Weekly</label>
      </div>
      <div class="custom-control custom-radio custom-control-inline">
        <input type="radio" class="custom-control-input plan_name" id="monthly" name="plan_name_selector" value="Monthly">
        <label class="custom-control-label" for="monthly">Monthly</label>
      </div>
      <input type="" name="plan_name" class="form-control ml-4 mt-2 w-50 selected_plan_name" />
    </div>

    【讨论】:

    • 哥这不是隐藏2div's
    • 我没有要检查的 html。这是一个如何使代码更清晰和可读的示例。您可以调试条件hideDays 并了解它为什么不能按设计工作。
    【解决方案2】:

    您可以使用函数来调用事件。请查看示例代码:

    $(document).ready(function() {
      $('input[name="plan_name_selector"]:first').attr("checked", true);
      check_plan_name_selector();
    
      $('.plan_name').change(function() {
        check_plan_name();
      });
    
      $("input[name='plan_name_selector']").click(function() {
        check_plan_name_selector();
      });
    
      function check_plan_name_selector()
      {
        var value = $("input[name='plan_name_selector']:checked").val();
        $('.selected_plan_name').val(value);
        $('.selected_plan_nameVal').html("You have choosed <b>" + value + "</b> validity.");
      }
    
      function  check_plan_name()
      {
        var plan_name = $(".selected_plan_name").val();
        if (plan_name === 'Daily') {
          $('.days_names').css('display', 'none');
          $('.select_days').css('display', 'none');
        } else {
          $('.days_names').css('display', 'block');
          $('.select_days').css('display', 'block');
        }
      }
    
    });
    

    【讨论】:

      【解决方案3】:

      我不太确定,您想做什么,但我认为您希望在页面加载时在文本输入中包含“每日”?如果这是正确的,您应该在页面加载时添加一些逻辑,而不仅仅是在点击时:

      $(document).ready(function() {
      
          var value = $("input[name='plan_name_selector']:checked").val();
          $('.selected_plan_name').val(value);
          $('.selected_plan_nameVal').html("You have choosed <b>" + value + "</b> validity.");
      
          if (value === 'Daily') {
              $('.days_names').css('display', 'none');
              $('.select_days').css('display', 'none');
          } else {
              $('.days_names').css('display', 'block');
              $('.select_days').css('display', 'block');
          }
      
          $('.package_validity_child').each(function() {
              $("input[name='plan_name_selector']", this).get(0).checked = true;
          }).trigger('change');
      
          $('.plan_name').change(function() {
              var plan_name = $(".selected_plan_name").val();
              if (plan_name === 'Daily') {
                  $('.days_names').css('display', 'none');
                  $('.select_days').css('display', 'none');
              } else {
                  $('.days_names').css('display', 'block');
                  $('.select_days').css('display', 'block');
              }
          });
      
          $("input[name='plan_name_selector']").click(function() {
              var value = $("input[name='plan_name_selector']:checked").val();
              $('.selected_plan_name').val(value);
              $('.selected_plan_nameVal').html("You have choosed <b>" + value + "</b> validity.");
          });
      });
      <html>
          <head>
              <script
                  src="https://code.jquery.com/jquery-3.4.1.min.js"
                  integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
                  crossorigin="anonymous">
              </script>
          </head>
      <body>
      <div class="package_validity_child">
          <div class="custom-control custom-radio custom-control-inline">
              <input type="radio" class="custom-control-input plan_name" id="daily" name="plan_name_selector" value="Daily" checked>
              <label class="custom-control-label" for="daily">Daily</label>
          </div>
          <div class="custom-control custom-radio custom-control-inline">
              <input type="radio" class="custom-control-input plan_name" id="weekly" name="plan_name_selector" value="Weekly">
              <label class="custom-control-label" for="weekly">Weekly</label>
          </div>
          <div class="custom-control custom-radio custom-control-inline">
              <input type="radio" class="custom-control-input plan_name" id="monthly" name="plan_name_selector" value="Monthly">
              <label class="custom-control-label" for="monthly">Monthly</label>
          </div>
          <input type="" name="plan_name" class="form-control ml-4 mt-2 w-50 selected_plan_name" />
      </div>
      </body>
      </html>

      【讨论】:

      • 是的,但我也希望如果daily 被选中,那么我的 2 divs should be display: none 正如我在代码中所说的那样,您可以看到:if(planname === 'Daily){}
      • @ZainShabir 这是编辑,但请注意,在这个变体中你有重复的代码,所以你应该添加一些功能。
      • 另外注意,我添加了检查到 html 代码,所以你应该将它更改为也适合你:)
      猜你喜欢
      • 2011-04-28
      • 1970-01-01
      • 2020-07-14
      • 2023-03-17
      • 1970-01-01
      • 2017-11-16
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多