2013-10-24 3 views
0

Я пытаюсь проверить, проверено ли одно из этих радиобокнов, и, если это необходимо, снять флажок и проверить следующее в строке.JQuery Loop останавливается после второго элемента

Я хотел бы повторить этот процесс каждые 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); 
}); 
+1

возможные проблемы области видимости. у вас есть функция внутри функции внутри функции. что вы ожидаете от «этого»? вы можете настроить jsfiddle для тестирования, пожалуйста, –

+2

(indexInArray * 400) НЕ ЕЩЕ 4 секунды. –

+0

Что такое функция запроса? какой-то аякс-вызов? – PSL

ответ

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'); 
} 
+0

да, спасибо и так много, <3, и я спас меня сегодня :) – Amin

+0

С удовольствием помогу. Если этот ответ или любой другой решают вашу проблему, отметьте его как принятый. Спасибо :) –

+0

спасибо за помощь ур – Amin

1

Как указано на @b_dubb, проблема не является в объеме, так как $ (это) после двух обратных вызовов больше не элемент, который вы хотели ,

попробовать что-то вроде этого:

$(".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 ($ (это)) могли бы помочь вам

EDIT

С elementcs являются селективные кнопки, а не галочки нет никакой необходимости, чтобы снять текущий элемент, так что вы можете легко опустить строку:

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

Каким будет нужно только тогда, когда элементы были флажками (множественный выбор разрешена)

Смежные вопросы