0

我正在尝试检查是否选中了这些单选框之一,如果是,则取消选中它并检查下一个。

我想每 4 秒重复一次这个过程。

<section class="cr-container">
<input id="select-img-1" name="radio-set-1" type="radio" class="cr-selector-img-1 radio-set" checked/>
<input id="select-img-2" name="radio-set-1" type="radio" class="cr-selector-img-2 radio-set" />
<input id="select-img-3" name="radio-set-1" type="radio" class="cr-selector-img-3 radio-set" />
<input id="select-img-4" name="radio-set-1" type="radio" class="cr-selector-img-4 radio-set" />
</section>

我试过这样的东西,但它不工作

$(".cr-container input").each(function(){
    setTimeout( function () {
        requestFunction(data, function(status){
            if ( status == 'OK' ) { 
                if ($(this).attr('checked')) {
                    $(this).next().prop('checked', true);
                }
            }
        });
    }, indexInArray * 400);
});
4

2 回答 2

1

正如@b_dubb 所指出的,问题出在范围内,因为两次回调后的 $(this) 不再是您想要的元素。

尝试这样的事情:

$(".cr-container input").each(function(){
    self = this
    setTimeout( function () {
        requestFunction(data, function(status){
            if ( status == 'OK' ) { 
                if ($(self).attr('checked')) {
                    $(self).prop('checked', false); //You wanted to uncheck current element, didn't you?
                    $(self).next().prop('checked', true);
                }
            }
        });
    }, indexInArray * 400);
});

关于 4 秒的间隔, indexInArray * 400 不会做你想做的事。你想每 4 秒检查一次所有元素你想每 4 秒检查一个元素吗?

顺便说一句,console.log($(this)) 可能对您有所帮助

编辑

由于 elementcs 是单选按钮而不是复选框,因此无需取消选中当前元素,因此您可以轻松省略该行:

$(self).prop('checked', false); //You wanted to uncheck current element, didn't you?

仅当元素是复选框时才需要(允许多选)

于 2013-10-24T16:50:57.880 回答
0

让我知道这是否是您正在寻找的:

这是jsfiddle:http: //jsfiddle.net/BTuaS/

setInterval(repeatProcess, 4000);

function repeatProcess() {
    $(".cr-container input").first().prop('checked', true);
    $(".cr-container input").each(function(i){
        var self = $(this);
        setTimeout( function () {
            requestFunction("", function(status){
                if ( status == 'OK' ) { 
                    if (self.prop('checked')) {
                        self.next().prop('checked', true);
                    }
                }
            });
        }, (i + 1) * 1000);
    });
}

function requestFunction(data, status){
    status('OK');
}
于 2013-10-24T16:56:17.993 回答