Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как остановить рекурсивную функцию по клику? (https://javascript.ru/forum/misc/60843-kak-ostanovit-rekursivnuyu-funkciyu-po-kliku.html)

Lutidza 22.01.2016 20:08

Как остановить рекурсивную функцию по клику?
 
Приветствую!

Подскажите, пожалуйста. Как можно остановить рекурсивную функцию по клику?

$(document).ready(function($) {

	$("#sent").click(sent_get);
	$("#stop").click( /*тут нужно вызвать функции которая должна остановить sent_get () */ );

	function sent_get () {

			$('result-box').prepend('<div class="result"></div>');

			$.ajax({
			  url: 'go1.php',
			  beforeSend: function () {
			  	var el_count;
			  	el_count = $('.result').length;

			  	if(el_count>5){
			  		$('.result').remove();
			  		el_count = 0;
			  	}

			  	$('.result-box').prepend('<div class="uk-panel uk-panel-box result"></div>');
			  	$('.result').append('<i class="uk-icon-spinner uk-icon-spin"></i>')
			  	 
			  },
			  success: function(data){
			    $('.uk-icon-spin').remove();
			    $('.result').addClass('success');
			    $('div.result:first').append(data);
			    sent_get ();
			  }	
			});
	}

});


Спасибо!

рони 22.01.2016 20:17

Lutidza,
var amba = false ;
	$("#sent").click(function() {  amba = false ;
 sent_get()
});
	$("#stop").click( function() { amba = true} );

	function sent_get () {
            if(amba) return;

Lutidza 23.01.2016 11:09

Большое спасибо!

Дабы не плодить тем. Подскажите, пожалуйста, как можно запустить данный скрипт многопоточно?

В идеале иметь ещё возможность управлять количеством потоков.

рони 23.01.2016 11:13

Цитата:

Сообщение от Lutidza
Подскажите, пожалуйста, как можно запустить данный скрипт многопоточно?

не в теме, ждите гуру :(

Lutidza 23.01.2016 12:21

Тогда такой ещё вопрос:

$.ajax({
			  url: 'go2.php',
			  beforeSend: function () {
			  	var el_count;
			  	el_count = $('.result').length;

			  	//Удаляю блокие когда из становится больше 5
			  	if(el_count>5){
			  		$('.result').remove();
			  		el_count = 0;
			  	}

			  	$('.result-box').prepend('<div class="uk-panel uk-panel-box result"></div>');
			  	$('.result').addClass('result'+el_count);

			  	$('.result'+el_count).append('<i class="uk-icon-spinner uk-icon-spin"></i>')
			  	 
			  },
			  success: function(data){
			    $('.result'+el_count).children('i').remove();
			    $('.result'+el_count).addClass('success');
			    $('.result'+el_count).append(data);
			    //sent_get ();
			  }
				
			});


Как мне из этой функции "beforeSend: function () {...", предать значение переменной в el_count в эту "success: function(data){..."

рони 23.01.2016 12:27

Lutidza,
строку 4 перенести в строку 0

Lutidza 23.01.2016 12:32

Спасибо :)

newuserjs2016 23.01.2016 16:41

Цитата:

Сообщение от Lutidza
как можно запустить данный скрипт многопоточно?

Смотрите в сторону web-workers. Если не нужна "реальная" многопоточность, можете использовать генераторы+промисы


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