Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Неправильно работает метод each() (https://javascript.ru/forum/jquery/23142-nepravilno-rabotaet-metod-each.html)

KamalovRadik 13.11.2011 20:09

Неправильно работает метод each()
 
$('.button2').live('click',function(){
			$('#poleGame img').each(function(){
					$('#karts').append($(this));
					$('#poleGame img').remove()})
				
			randSopernik();
			hodSoper();
			//return false;
			})



После того как я нажму кнопку , вып-ся each(), затем randSopernik(), hodUser() и опять заходит в each. Почему?

KamalovRadik 13.11.2011 21:53

в ф-ии hodSoper картинка появляется в блоке poleGame, после того как сыграет each. Но почему-то опять туда возвращается

KamalovRadik 13.11.2011 22:57

var flagBeru = false;
		$('.button2').live('click',function(){
			
			for (i=0; i< $('#poleGame img').length; i++){
				
				if(flagBeru){
					return false;
				}
				$('#karts').append($('#poleGame img').eq(i));
				flagBeru = true;
				
			
														}
			randSopernik();
			hodSoper();
			//return false;
			})


Этот код работает, скажите, в чем ошибка в первом посте?

KamalovRadik 13.11.2011 23:34

А нет, я ошибся оказывается, в 4ом посте код тоже не рабочий

И возвращается не в цикл, а в live, причём
в 1 случае - 1 раз
во 2 - 2
в 3 - 4
в 4 - 8
в 5 - 16 и т.д.

Думаю в этом есть какая-то зависимость.

DjDiablo 14.11.2011 00:18

Each удачнее чем for, можно сказать в 5ом посте исправлена ошибка.
А что такое flagBeru ? Нафига он вам нужен ?

вместо return False разумно для прерывания цикла использовать break. Прокатит только для цикла for, насколько я знаю.
Неудобство фор в том что нумерация элементов после append будет меняться. Но эта проблема легко решается если сделать выборку до цикла и сохранить её в переменную img=$('#karts').append($('#poleGame img');

trikadin 14.11.2011 00:34

Цитата:

Сообщение от DjDiablo
Прокатит только для цикла for, насколько я знаю.

Хм...
i=0;
while(i!= 9000) {
 if (++i==20)
  break
};
alert(i);

DjDiablo 14.11.2011 00:58

Цитата:

Хм...
Не цепляйся к словам :)
Я имел ввиду что each не совсем цикл, а всё таки метод.
И return в callback, для each уместнее чем break.

а у него return внутри for цикла был.

trikadin 14.11.2011 01:04

Цитата:

Сообщение от DjDiablo
Не цепляйся к словам

Не цеплялся) Просто понял тебя неправильно.

KamalovRadik 15.11.2011 23:42

Сделал вот так:

function forVzyal() {
            kolvoElem = $('#poleGame img').length;
            for (i=0; i< $('#poleGame img').length; i++){
                
                
                
                $('#karts').append($('#poleGame img').eq(i));
              
                                                        }
            
                                            }
                           
        
        $('.button2').click(function(){
            forVzyal();
            randSopernik();
            hodSoper();
            
          
            })

KamalovRadik 15.11.2011 23:43

Вот почему у меня после ф-ии hodSoper снова выполняется forVzyal()?


Часовой пояс GMT +3, время: 19:17.