Две функции с одинаковым названием
В одном файле есть две функции на 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> Если они обе в коде, работает только последняя. Как можно сделать чтобы имена у функций были однаковые но они работали? Вообще нужно как-то объеденить их, но вот как незнаю. Пытался по разному. Совмещал тела функций в такой же последовательности, пытался извратиться с условиями. |
Каким образом вы будете к ним обращаться, если у них будут одинаковые имена?
|
1. В JS нет перегрузки функций.
2. Даже если бы была, в этом случае она бы не помогла. Вам нужна одна функция, в зависимости от переданных аргументов, делающая то, что нужно. |
Ну факт в том что необходимо именно такое название функции. И как быть в таком случае я сам незнаю.:-? |
Какое поведение вы хотите от этих двух функций с одинаковыми именами? Вот есть две функции с именем test. Я вызываю test(). Что происходит? Какая функция вызывается?
И чем вызвана такая необходимость, две функции с одинаковыми именами? |
никак.напиши свой адрес и на двери у соседей и сделай так чтобы вам одно письмо одновременно приносили и оставляли))))Да переиминуй вторую. тем более они у тебя не пересекаются . тот вариант толи лыжи толи я....сам то хоть понимаеш чего от этого всего хош?)
|
Вариант один - объеденить функции. Пример:
function ChangeType(bType){ if (bType > 1 && bType < 20){ // код первой функции }else{ // код второй функции } } |
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> И в зависимости от выбранного селекта первая функция выводит мин.цены, а вторая убирает или открывает новые ячейки. |
Почему их должно быть именно две? Почему их нельзя объединить? Почему их нельзя назвать разными именами и вызывать по-очереди?
|
Цитата:
|
не просматривал я код-да и спать хочу. но если ты передаёш в функцию разнопланое параметры и от их типа условно выбираеш нужную функцию-то объедени всё в одну,а в функцию передавай два параметра-и сделай проверку -какой именно предаётся. и в зависимости от того какой поереданный вызывай нужное действие код не хочу расписывать. напишу алгоритм
функция (а,б) { если а присутствует действие 1 если б присутсвует действие 2 если а и б присутствуют то действия 1 и 2 если пустые оба то действия какието } ну при условии что знееш что какихто условий нет то опустиш некотые пункты. п.с если параметр не пердаётся в функцию его тип ундефинит |
да в принципе можешь и один параметр если он разнотиповый-только проверяй его тип
|
Попробовал сделать так:
function ChangeType(bType,Type) { 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 = ''; document.getElementById('TR_BANNER').style.display = ''; document.getElementById('TR_CONTEXT').style.display = ''; if (bType.value != '' && Type.value == 'context' || Type.value == 'context2') { 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; document.getElementById('TR_BANNER').style.display = 'none'; } if (bType.value != '' && Type.value != 'context' || Type.value != 'context2') { 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; document.getElementById('TR_CONTEXT').style.display = 'none'; } } Но к сожалению не увенчалось успехом :) |
не хочу смотреть код. но ошибка видна сразу основная. в ветвлениях не bType.value а просто bType. а то что ты написал-в с++ и подобных-ты создал новый класс. нобелевскую премию тебе:yes:
это тебе по типам переменных http://javascript.ru/typeof а это по работе с функциями http://javascript.ru/Function |
да и ветвление у тебя тройное в условии-хоть скобки расставь-слышал когда нибудь о приоритете?)и как он может выделываться иногда?
|
Ди и проработай условия лучше-сначала определи переданна ли переменная -определи её тип если не равна ундефенит именно тип-начинай работать с её значениями. сначала ТИПЫ потом ЗНАЧЕНЯ!!
if (typeof bType !="undefined"){ проверка на значения и действия } if (typeof Type !="undefined"){ проверка на значения и действия } if ((typeof Type !="undefined")&&(typeof Typeb !="undefined")){ проверка на значения и действия } |
Цитата:
|
если одно из значений не переадаётся в функцию -то значение этой переменной ундефинит!!! убери ошибки логики у себя-распиши свой алгоритм для себя на бумаге-пропиши словами условия и всё поймёш. Я тебе написал как уже и не один раз а то что не работает это твои ошибки логики синтаксиса и т.д
|
особенность скрипта-менять типы предопределённых перменных в зависимости от переданных данных
|
умм...не увидел второй страницы ))
Если просто определить с какого select запрос, то: <select name="minPrice" class="input-select" onchange="ChangeType(this)"> <option value="11">name 11</option> <option value="12">name 12</option> </select> <select name="showHideCell" class="input-select" onchange="ChangeType(this)"> <option value="21">name 21</option> <option value="22">name 22</option> </select> <script type="text/javascript"> function ChangeType(o){ alert('Select name: '+o.name+'\n'+'op text: '+o.options[o.selectedIndex].innerHTML+'\n'+'op value: '+o.options[o.selectedIndex].value); if (o.name == 'minPrice'){ alert('select 1'); // код 1 функции }else{ alert('select 2'); // код 2 функции } } </script> |
он основ вообще не знает ты его грузиш селектами)))
|
Цитата:
1. RTFM 2. Заказать за деньги у знающих... |
Часовой пояс GMT +3, время: 13:49. |