Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.08.2012, 16:01
Аспирант
Отправить личное сообщение для Jeremen Посмотреть профиль Найти все сообщения от Jeremen
 
Регистрация: 03.02.2012
Сообщений: 45

Почему в некоторых случаях функцию события нужно обвертывать в анонимную функцию
Делал это задание и создал свою функцию
function count(quantity, period, capitalization) {
		if (quantity.charAt(0) == 0 || quantity < 0) return;
		if (capitalization) {
			var sum = quantity * Math.pow(1.12, period / 12);
		} else {
			var sum = +quantity + quantity * 0.12 *  period / 12;
		}
		if (!sum) return;
		was.innerHTML = quantity;
		will.innerHTML = sum;
		willGraph.style.height = sum / quantity * 100 + 'px';
	}

Так вот когда я вешаю функцию на событие change инпута, вот так(инпут.onchange = count(передаю параметры)) то всё работает нормально. Но когда вешаю функцию на событие change селекта, то для того что бы оно заработало функцию привязывать к событию нужно обернув в анонимную функцию, вот так(селект.onchange = functio() {
count(передаю параметры)
})
Подскажите пожалуйста в почему так происходит?
Ответить с цитированием
  #2 (permalink)  
Старый 26.08.2012, 16:17
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Jeremen
вот так(инпут.onchange = count(передаю параметры))
при такой передаче произойдёт вызов count с переданными параметрами и onchnage присвоится результат этого вызова
<input>

<script>
function f(a) {
	alert(a);
}

document.body.children[0].onchange = f('text');
</script>

Если возвращается функция, то всё нормально
<input>

<script>
function f(a) {
	alert(a);
	return function () {f(a)}
}

document.body.children[0].onchange = f('text');
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 26.08.2012, 16:27
Аспирант
Отправить личное сообщение для Jeremen Посмотреть профиль Найти все сообщения от Jeremen
 
Регистрация: 03.02.2012
Сообщений: 45

bes, то есть если функция не возвращает функцию то её нужно обвертывать что бы работало?
Ответить с цитированием
  #4 (permalink)  
Старый 26.08.2012, 16:34
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

обработчиком назначается функция, поэтому функцию и нужно присваивать, функцию с параметрами проще всего передавать именно таким образом, так как скобки () - приводят к вызову функции
Ответить с цитированием
Ответ



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

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