Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Две функции с одинаковым названием (https://javascript.ru/forum/dom-window/13285-dve-funkcii-s-odinakovym-nazvaniem.html)

Tchort 24.11.2010 16:32

Две функции с одинаковым названием
 
В одном файле есть две функции на JS.
<script type="text/javascript">
	function ChangeType(bType)
	{
		var min_cost_1000 = new Array();
		var min_cost_click = new Array();
		var text_min_cost = '<?= GetMessage("ADVNET_MIN_COST")?>: ';
		var curr_min_cost = '<?= str_replace("#", "", $arResult["CURRENCY"]["FORMAT_STRING"])?>';

		<?foreach ($arResult["TYPES"] as $sid => $arType):?>
		min_cost_1000['<?= $sid?>'] = '<?= number_format($arType["COST_1000"], 2)?>';
		min_cost_click['<?= $sid?>'] = '<?= number_format($arType["COST_CLICK"], 2)?>';
		<?endforeach;?>

		document.getElementById('COST_PER_1000_MIN').innerHTML = '';
		document.getElementById('COST_PER_CLICK_MIN').innerHTML = '';

		if (bType.value != '')
		{
			document.getElementById('COST_PER_1000_MIN').innerHTML = text_min_cost + min_cost_1000[bType.value] + curr_min_cost;
			document.getElementById('COST_PER_CLICK_MIN').innerHTML = text_min_cost + min_cost_click[bType.value] + curr_min_cost;
		}
	}
</script>

<script type="text/javascript">
	function ChangeType(Type)
	{
		document.getElementById('TR_BANNER').style.display = '';
		document.getElementById('TR_CONTEXT').style.display = '';
			
		if (Type.value == 'context' || Type.value == 'context2')
		{
			document.getElementById('TR_BANNER').style.display = 'none';
		}
		else
		{
			document.getElementById('TR_CONTEXT').style.display = 'none';
		}
	}
</script>


Если они обе в коде, работает только последняя. Как можно сделать чтобы имена у функций были однаковые но они работали? Вообще нужно как-то объеденить их, но вот как незнаю.
Пытался по разному. Совмещал тела функций в такой же последовательности, пытался извратиться с условиями.

Kolyaj 24.11.2010 16:43

Каким образом вы будете к ним обращаться, если у них будут одинаковые имена?

B@rmaley.e><e 24.11.2010 16:44

1. В JS нет перегрузки функций.
2. Даже если бы была, в этом случае она бы не помогла. Вам нужна одна функция, в зависимости от переданных аргументов, делающая то, что нужно.

Tchort 24.11.2010 16:50


Ну факт в том что необходимо именно такое название функции. И как быть в таком случае я сам незнаю.:-?

Kolyaj 24.11.2010 16:58

Какое поведение вы хотите от этих двух функций с одинаковыми именами? Вот есть две функции с именем test. Я вызываю test(). Что происходит? Какая функция вызывается?

И чем вызвана такая необходимость, две функции с одинаковыми именами?

dmitriymar 24.11.2010 17:13

никак.напиши свой адрес и на двери у соседей и сделай так чтобы вам одно письмо одновременно приносили и оставляли))))Да переиминуй вторую. тем более они у тебя не пересекаются . тот вариант толи лыжи толи я....сам то хоть понимаеш чего от этого всего хош?)

`p r o x y 24.11.2010 21:26

Вариант один - объеденить функции. Пример:
function ChangeType(bType){
   if (bType > 1 && bType < 20){
      // код первой функции
   }else{
      // код второй функции
   }
}

Tchort 25.11.2010 11:02

Kolyaj,
Обе функции нужны для селекта. Вот тут:
<select name="TYPE" class="input-select" onchange="ChangeType(this);">
				<option value=""></option>
				<?foreach ($arResult["TYPES"] as $sid => $arType):?>
				<option value="<?= $sid?>"<?if ($arResult["TYPE"]==$sid){?> selected="selected"<?}?>><?= $arType["NAME"]?></option>
				<?endforeach;?>
			</select>


И в зависимости от выбранного селекта первая функция выводит мин.цены, а вторая убирает или открывает новые ячейки.

Kolyaj 25.11.2010 11:06

Почему их должно быть именно две? Почему их нельзя объединить? Почему их нельзя назвать разными именами и вызывать по-очереди?

Tchort 25.11.2010 11:09

Цитата:

Сообщение от Kolyaj (Сообщение 80637)
Почему их должно быть именно две? Почему их нельзя объединить? Почему их нельзя назвать разными именами и вызывать по-очереди?

Вот не знаю как их объединить.


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