【问题标题】:Radio Input Control with External Button带外部按钮的无线电输入控制
【发布时间】:2016-10-26 11:56:02
【问题描述】:

您好,我正在使用无线电输入制作幻灯片,并设计了“上一个”和“下一个”按钮来移动幻灯片。但是,我还希望这些按钮也可以检查下一个输入。当前幻灯片移动,但未检查下一个输入。我在这里查看了这个解决方案: Select next/prev radio button with external button 并试图实现它,但我无法让它工作。这是我的代码:

<form action="" method="post">
    <ul class="form-ul" style="position: relative; width: 176px; height: 107px;">                            
      <li style="position: absolute; top: 0px; left: 0px; display: block; z-index: 5; opacity: 1; width: 82px; height: 43px;">
        <label>
          <input type="radio" name="term_id" value="59" checked="checked">
        </label>
      </li>
      <li style="position: absolute; top: 0px; left: 0px; display: none; z-index: 4; opacity: 0; width: 82px; height: 62px;">
        <label>
          <input type="radio" name="term_id" value="61">
        </label>
      </li>
    </ul>
    <div id="prev" style="float:left;">PREV</div> 
    <div id="next" style="float:right;">NEXT</div>
</form>

JavaScript:

$(document).ready(function(){
  $('#prev').click(function(){
    $('.form-ul').find('li:has(input:checked)').prev().children('input').prop("checked", true);
  });

  $('#next').click(function(){
    $('.form-ul').find('li:has(input:checked)').next().children('input').prop("checked", true);
  });
});

【问题讨论】:

    标签: javascript jquery button input radio


    【解决方案1】:

    jQuery 的.children() 只查找元素的直接子元素。在您的情况下,单选按钮不是直接子级,因此您需要将其更改为 .find()

    $(document).ready(function(){
      $('#prev').click(function(){
          $('.form-ul').find('li:has(input:checked)').prev().find('input').prop("checked", true);
      });
    
      $('#next').click(function(){
          $('.form-ul').find('li:has(input:checked)').next().find('input').prop("checked", true);
      });
    });
    

    此外,您可以通过减少查询来提高性能。而不是

    $('.form-ul).find('li:has(input:checked)')
    

    使用

    $('.form-ul li:has(input:checked)')
    

    要使其循环,请检查结果集的length

    $('#next').click(function(){
      var $next = $('.form-ul li:has(input:checked)').next();
      if(!$next.length) $next = $('.form-ul li').first();
      $next.find('input').prop("checked", true);
    });
    

    这是fiddlecircular fiddle

    【讨论】:

    • 您好 Yoav,您的回答很有道理,看起来正确,但由于某种原因无法正常工作。
    • 我加了一个fiddle,看看
    • 您好 Yoav,它不起作用,因为与幻灯片的其他 javascript 存在冲突。现在可以了。非常感谢!我支持你,但由于我是新用户并且没有足够的声望点,所以它没有显示。再次感谢!
    • 请问你,有没有办法让它循环,以便在最后一次输入后,如果我再次点击下一步,它会回到原来的输入?
    • 当然,我已经更新了我的答案,并用小提琴来展示它是如何完成的。此外,除了点赞之外,您还可以接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2015-01-03
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多