在幻灯片中以循环顺序使用jQuery的prev和next功能。

4
我想问一下为什么以下代码不能按照1、2、3、1、2、3的顺序通过(jsfiddle),当我继续按“下一个”时。
当我在Chrome中打开并运行以下代码时,它无法按照"1,2,3"的顺序运行代码(它停在3)。
HTML
<div id="slides">
   <ul class="options-list">
   <li><input type="radio" class="getradiotomove" id="bundle-73" name="bundle_option"checked="checked" value="73"></li>
   <li><input type="radio" class="getradiotomove" id="bundle-72" name="bundle_option" value="72"></li>
   <li><input type="radio" class="getradiotomove" id="bundle-74" name="bundle_option" value="74"></li>
</div>

<div id="buttons">
   <a href="#" id="prev">prev</a>
   <a href="#" id="next">next</a>
   <div class="clear"></div>
</div>

JS

$('#next').click(function() {
    var $all     = $('.getradiotomove');
    var $current = $('.getradiotomove:checked');

    var index = $all.index($current) + 1;
    if(index >= $all.length)
        index = 0;
    $($all[index]).attr('checked', 'checked');
    return false;
});

1
这个示例在我的Chrome和Firefox上都可以工作。 - ced-b
你有检查错误日志吗? - ced-b
@taikachan 清除缓存并重试。或在Chrome浏览器中打开无痕模式。 - Shiladitya
可能是因为使用了 #attr() - 改用 #prop() - 参见 这里。我会标记为重复问题。 - kukkuz
显示剩余4条评论
1个回答

1

这里提供另一种方法http://jsfiddle.net/hTgv3/162/

$('#next').click(function() {
    if($('.getradiotomove:checked').parent().is(':last-child')){
     $('ul[class="options-list"] > li')
       .first()
        .find('.getradiotomove')
       .prop('checked', true);
    } else {
     $('.getradiotomove:checked')
        .parent()
        .next('li')
        .find('.getradiotomove')
        .prop('checked', true);
    } 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="slides">
    <ul class="options-list">
        <li><input type="radio" class="getradiotomove" id="bundle-73" name="bundle_option" value="73" checked></li>
        <li><input type="radio" class="getradiotomove" id="bundle-72" name="bundle_option" value="72"></li>
        <li><input type="radio" class="getradiotomove" id="bundle-74" name="bundle_option" value="74"></li>
    </ul>
</div>

<div id="buttons">
    <a href="#" id="prev">prev</a>
    <a href="#" id="next">next</a>
    <div class="clear"></div>
</div>

希望这可以帮助您解决问题。

欢迎 @taikachan :) - Shiladitya
它在普通的HTML文件中可以工作。但是,如果我将其放入我的网站(带有许多插件),它无法持续运行。然而,您的解决方案对我来说是最好的。 - taika chan
让我们尝试调试您的问题。您能检查一下浏览器控制台中出现了什么错误吗? - Shiladitya
你在其他地方使用过 ".getradiotomove" 类吗?除了这个特定的输入复选框? - Shiladitya
我已经更新了答案,请查看。更新后的代码是 $('ul[class="options-list"] > li') - Shiladitya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接