setInterval не работает

function checkPrice(afford){
	var z = document.getElementById('man_cost').innerHTML;
	var a = document.getElementById('mouse_cost').innerHTML;
	var b = document.getElementById('farm_cost').innerHTML;
	var c = document.getElementById('factory_cost').innerHTML;
	a = parseInt(a);
	b = parseInt(b);
	c = parseInt(c);
	z = parseInt(z);
	if(afford == 'cannot'){
		if(amount < z){
			document.getElementById('upClick').style.opacity = '.5';
		};
		if(amount < a){
			document.getElementById('upMouse').style.opacity = '.5';
		};
		if(amount < b){
			document.getElementById('upFarm').style.opacity = '.5';
		};
		if(amount < c){
			document.getElementById('upFactory').style.opacity = '.5';
		};
	}else if(afford == 'can'){
		if(amount >= z){
			document.getElementById('upClick').style.opacity = '1';
		};
		if(amount >= a){
			document.getElementById('upMouse').style.opacity = '1';
		};
		if(amount >= b){
			document.getElementById('upFarm').style.opacity = '1';
		};
		if(amount >= c){
			document.getElementById('upFactory').style.opacity = '1';
		};
	};
	return;
};

setInterval(checkPrice('can'),1000);

setInterval не работает. Цена обновляется каждую секунду, но если цена достигает доступной суммы, функция checkPrice не выполняет функцию и эффекты не имеют места, как должны. Однако, когда я вызываю setPrice после взаимодействия с пользователем, это работает.


person James Crovo    schedule 16.12.2015    source источник
comment
Вам нужно передать функцию, а не возвращаемое значение вызова функции, если возвращаемое значение не является функцией.   -  person MinusFour    schedule 16.12.2015
comment
Можете ли вы опубликовать рабочий пример на jsfiddle.net?   -  person Maria Ines Parnisari    schedule 16.12.2015
comment
@miparnisari ac.net.co/projects/clicker/clicker.html   -  person James Crovo    schedule 16.12.2015
comment
@slebetman На своей веб-странице они определили его как глобальный var amount = 0;.   -  person Spencer Wieczorek    schedule 16.12.2015
comment
Вам нужно выполнить этот код как отдельный фрагмент кода или как обратный вызов события?   -  person Gonzalo Pincheira Arancibia    schedule 16.12.2015
comment
checkPrice — это функция. checkPrice('can') не возвращает функцию. Без функции setInterval нечего вызывать.   -  person Sheepy    schedule 16.12.2015
comment
Возможный дубликат Javascript setInterval не работает   -  person Sheepy    schedule 16.12.2015


Ответы (3)


Вам нужно будет написать это как:

setInterval(function(){checkPrice('can')},1000);

Это связано с тем, что первый параметр принимает function, а functionName(..) даст возвращаемое значение, а не саму функцию. Примечание, если у функции нет параметров, ее можно записать так: setInterval(checkPrice,1000);.

person Spencer Wieczorek    schedule 16.12.2015
comment
Это все еще не работает. не могли бы вы проверить мою веб-страницу? ac.net.co/projects/clicker/clicker.html - person James Crovo; 16.12.2015
comment
@JamesCrovo Тогда проблема не в setInterval(), не могли бы вы привести минимальный пример проблемы со скрипкой или фрагментом? Я не могу редактировать код на вашей веб-странице и даже не знаю, что должно происходить, чтобы он работал. - person Spencer Wieczorek; 16.12.2015
comment
jsfiddle.net/3mvL4kmb/8, но в процессе копирования и вставки это не совсем Работа. - person James Crovo; 16.12.2015

Ваша переменная amount вообще if() не определена, возможно, поэтому она не работает.

person Radames E. Hernandez    schedule 16.12.2015

Если вы хотите передать значение «на лету» при выполнении, попробуйте использовать bind()method.

function checkPrice(){
    var afford = this.option;

    var z = document.getElementById('man_cost').innerHTML;
    var a = document.getElementById('mouse_cost').innerHTML;
    var b = document.getElementById('farm_cost').innerHTML;
    var c = document.getElementById('factory_cost').innerHTML;
    a = parseInt(a);
    b = parseInt(b);
    c = parseInt(c);
    z = parseInt(z);
    if(afford == 'cannot'){
        if(amount < z){
            document.getElementById('upClick').style.opacity = '.5';
        };
        if(amount < a){
            document.getElementById('upMouse').style.opacity = '.5';
        };
        if(amount < b){
            document.getElementById('upFarm').style.opacity = '.5';
        };
        if(amount < c){
            document.getElementById('upFactory').style.opacity = '.5';
        };
    }else if(afford == 'can'){
        if(amount >= z){
            document.getElementById('upClick').style.opacity = '1';
        };
        if(amount >= a){
            document.getElementById('upMouse').style.opacity = '1';
        };
        if(amount >= b){
            document.getElementById('upFarm').style.opacity = '1';
        };
        if(amount >= c){
            document.getElementById('upFactory').style.opacity = '1';
        };
    };
    return;
};

setInterval(checkPrice.bind({option: 'afford'}),1000);
person Gonzalo Pincheira Arancibia    schedule 16.12.2015