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 が指摘したように、2 つのコールバックの後の $(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 秒ごとに 1 つの要素をチェックしますか?

ところで、console.log($(this)) が役に立ったかもしれません

編集

elementcs はチェックボックスではなくラジオ ボタンであるため、現在の要素のチェックを外す必要はありません。そのため、次の行を簡単に省略できます。

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

要素がチェックボックスである場合にのみ必要です(複数選択が許可されています)

于 2013-10-24T16:50:57.880 に答える