Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.10.2013, 20:44
Новичок на форуме
Отправить личное сообщение для Romingood Посмотреть профиль Найти все сообщения от Romingood
 
Регистрация: 24.10.2012
Сообщений: 4

Цикл завешивает страницу, помогите
Привет всем! Сорри за вопрос чайника!

Итак, задача - по клику на кнопке начать цикл, он длительный.
Залипающую кнопку не нашел, поэтому решил использовать чекбокс.
В цикле проверяю состояние чекбокса и если его сняли, останавливаю цикл. Но это не сработало, т.к. цикл вешает страницу и не дает ничего изменить, в том числе кликнуть на чекбокс.

Как быть?
Пытаюсь делать вот так:


<div><input type="button" value="Начать закачку объектов в базу" class="startbutton"><br>
<input type="checkbox" class="startcheckbox">Снять флажок для остановки процесса</div>

и далее уже в JS пишу


$('.startbutton').click(function(){
$(".startbutton").hide("fast");
$('.startcheckbox').attr('checked','checked');

$.each(pic, function(ind, val) { пошел цикл
});
</code>

Но всё зависает как только нажал startbutton
даже кнопка не исчезает, а только после цикла уже пропадает, когда мне это совсем не нужно.

А вот чекбокс кстати устанавливается в Checked.
но... снять его я не могу.

Как сделать легкий цикл? Чтобы в процессе можно было вводить что нть на странице.

или какой-нибудь более простой способ вручную НАЧАТЬ цикл и потом иметь возможность его ВРУЧНУЮ ПРЕРВАТЬ.

как?
Ответить с цитированием
  #2 (permalink)  
Старый 18.10.2013, 21:38
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Два решения:
1) Не использовать цикл. Использовать таймер через setInterval
2) Использовать WebWorker
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 18.10.2013, 22:57
Новичок на форуме
Отправить личное сообщение для Romingood Посмотреть профиль Найти все сообщения от Romingood
 
Регистрация: 24.10.2012
Сообщений: 4

Сообщение от danik.js Посмотреть сообщение
Два решения:
1) Не использовать цикл. Использовать таймер через setInterval
2) Использовать WebWorker
Насчет WebWorker начал копать, спасибо за наводку.

Что касается первого пункта, как же я обойдусь без цикла?
Если у меня на этой же странице чуть выше ПХП-шка генерирует массив, и он всегда разный.

1, 2, 55 элементов, или 2000...

Объясню с самого начала.
Их Пхп в Jquery передаю переменные так:

<input type=hidden id='num' value='массив ссылок через запятую'>";

дальше их принимаю и разбираю в массив уже в Яваскрипте

pic = $('#num').val().split(",");

И по каждому элементу массивав мне нужно выполнить определенные действия. Я умею только так:

$.each(pic, function(ind, val) { действия }

Может, как-то еще можно принять массив изх ПХП и выполнить действия над элементами массива (например, открыть все ссылки, или показать все картинки, не суть... )?

В принципе, всё работает, у меня там через Аякс открывается пхп файл и выдает результат. И так до 50 раз. Всё ок.

Но в процессе работы страница виснет в плане ввода, то есть я не могу остановить процесс. Че-то там выводит мне в дивы, пашет, но не отвечает на внешние раздражители )))
Ответить с цитированием
  #4 (permalink)  
Старый 19.10.2013, 06:33
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Romingood
не отвечает на внешние раздражители
Естественно. Потому что UI в одном потоке с твоими вычислениями. А значит пока что-то высчитывается UI виснет. Используй setInterval, делая вычисления пошагово, давая возможность юзеру нажать cancel.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 19.10.2013, 10:54
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от danik.js
Используй setInterval
А я почему-то не люблю setInterval. Возможно, я просто не умею его готовить, но мне почему-то при его применении постоянно представляется наложение одних на другие вызовов функций, длительность исполнения которых может вдруг затянуться. Первая еще не закончила выполняться, а следом уже вторая подпирает.
Предпочитаю в таких случаях использовать setTimeout в конце функции с вызовом этой же функции.
danik.js, я заблуждаюсь?
Ответить с цитированием
  #6 (permalink)  
Старый 19.10.2013, 14:30
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от BETEPAH
danik.js, я заблуждаюсь?
Не думаю. Возможно setTimeout подойдет лучше.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите сократить код (преобразовать в цикл) eko24 jQuery 5 09.11.2012 00:19
Помогите глупенькой, как перейти на n-ную страницу сайта где джава??? nslannd Общие вопросы Javascript 12 19.04.2012 10:00
Помогите написать цикл serhanters jQuery 1 31.05.2011 03:51
Помогите с передачей данных с формы на другую страницу Dimand (X)HTML/CSS 3 13.02.2011 11:14
Дописать под страницу помогите плз.. N_L Серверные языки и технологии 2 27.10.2009 15:38