Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменить функцию через условие (https://javascript.ru/forum/misc/57807-izmenit-funkciyu-cherez-uslovie.html)

Валерий1996 20.08.2015 18:04

Изменить функцию через условие
 
Есть счётчик кликов по элементам. Первый клик он записывает в переменную : sfId_Start , второй в sfId_Target . Потом эти данные передаются в переменные part1 и part2, дальше эти данные приводятся к строке и складываються в переменной sumspart (). Проблема в том чтоб корктно передать эти данные в переменную path и перезапустить функцию drawPath(path);
вот код :
function drawPath(path) {
	setTimeout(function loop() {
	    var current = path.shift();

	    var point = document.querySelector('.c'+current[1]+current[0])
	    point.classList.add('path')
	    if (path.length)
	        setTimeout(loop, 100);
	}, 500);

}

window.onload = function () {
// add eventListener for tizenhwkey
    document.addEventListener('tizenhwkey', function(e) {
        if(e.keyName == "back")
            tizen.application.getCurrentApplication().exit();
    });
    
	
	
    var matrix = [
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
		[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
		[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
		[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
		[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
		[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    ];
	

	
// console.log( matrix [ ( 3)] [ (4)])
	
    var grid = new PF.Grid(10, 10, matrix);
    
    var finder = new PF.BiDijkstraFinder();

    var path = finder.findPath(0, 3, 9, 9, grid);

    console.log(path);
    drawPath(path);
	
	
	
	var part1
	var part2
	var sumPart
	var informererd = 0
	
	String(part1,
	part2,
    sumPart)
	
	
	$('td').click( function sumspart () {
		if (part1 > "" && part2 > "" ) {sumPart = part1+ ',' + ' ' + part2  + ',' + ' ' + "grid" ;console.log(sumPart); }
    
	
	if (sumPart > "" ) { sumPart === sumPart ; if ( sumPart === sumPart) { path = finder.findPath(sumPart);             };          drawPath(path);                         }  }   )
	
	
	
	
	
		
	

$(function () {
    var informer = false,
	  sfId_Start,
	  sfId_Target; 
     

    $('td').click(handleClick);

    function handleClick() {
	
        informer = !informer;

        if (informer) {
            sfId_Start = $(this).attr('id');
			part1 = sfId_Start
            sfId_Target = null;
        } else {
            sfId_Target = $(this).attr('id');
			part2 = sfId_Target
            sfId_Start = null;
        }

        console.log(informer, sfId_Start, sfId_Target);
    }
	
	
	
});

Валерий1996 20.08.2015 18:08

То есть система такая : один клик взяли значение второй клик взяли второе значение сложыли эти 2 значения вместе и передали их вот сюда:
path = finder.findPath(0, 3, 9, 9, grid);
и перезапустили функцию : drawPath(path); (это нужно делать при 2 клике)
Подскажите как это правильно реализовать?
Вот весь код : http://jsfiddle.net/48u3mx4w/13/

рони 20.08.2015 18:59

Валерий1996,
алгоритм --- клик по клетке - переменная пуста (ничего не делаем) занесли данные в переменную - клик по клетке - сравниваем данные переменной и клетки - одинаковые (ничего не делаем) -- иначе передаём данные переменной и клетки , затем обнуляем переменную.

рони 20.08.2015 19:06

Валерий1996,
примерно так
$(function() {
    var a;
    $("td").click(function() {
        var b = $(this).attr("id");
        a ? a != b && (path = finder.findPath(a, b, grid), drawPath(path), a = null) : a = b
    })
});

Валерий1996 21.08.2015 11:30

Цитата:

Сообщение от рони (Сообщение 384992)
Валерий1996,
примерно так
$(function() {
    var a;
    $("td").click(function() {
        var b = $(this).attr("id");
        a ? a != b && (path = finder.findPath(a, b, grid), drawPath(path), a = null) : a = b
    })
});

Я сделал такую конструкцию как Вы мне посоветовали, но ошибка возникает на этапе передачи данных в path = finder.findPath(a, b, grid)
Возможно нужно как то привести к числу данные переменных : a и b(там хранятся значения типа 0, 3, 9, 9 ) Но это скорее всего строка и может из-за этого код работать не хочет. Может есть способ както его на выходе превести к числу ? я пробовал persfolatom но не получилось(

Валерий1996 21.08.2015 11:32

Или число это нужно привести к числу и распарсить на 4 отдельных числа как в примере ? Если да, то подскажите как это сделать ?

рони 21.08.2015 11:40

Валерий1996,
где функция findPath?

рони 21.08.2015 11:44

Валерий1996,
$(function() {
    var a;
    $("td").click(function() {
        var b = $(this).attr("id");
        a ? a != b && (a=a.split(/\s+/),b=b.split(/\s+/),path = finder.findPath(a[0],a[1],b[0],b[1], grid), drawPath(path), a = null) : a = b
    })
});


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