我正在检查是否检查了其中一个收音机盒,如果是,则取消选中它并检查下一行。
我想每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);
});
答案 0 :(得分: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秒检查一个元素吗?
BTW一个console.log($(this))可能对你有所帮助
修改强>
由于elementcs是单选按钮而不是复选框,因此无需取消选中当前元素,因此您可以轻松省略该行:
$(self).prop('checked', false); //You wanted to uncheck current element, didn't you?
仅当元素为复选框(允许多个选择)时才需要
答案 1 :(得分: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');
}