Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   передача параметра в функцию (https://javascript.ru/forum/dom-window/15769-peredacha-parametra-v-funkciyu.html)

DmitryT 12.03.2011 16:00

передача параметра в функцию
 
Здравствуйте делаю своеобразное меню по onmouseover под td появляется, при помощи альфа фильтра, еще одна таблица (подменю), по onmouseout подменю изчезает, не могу понять как передать строковый параметр (id) для подменю.
var count = 0, st = '', st2 = '';
function f(id)
{
	clearTimeout(st2);
	id.filters.alpha.opacity = count++;   // document.all.
	st = setTimeout("f(id)",30);
	if(count == 100) clearTimeout(st);
}

</SCRIPT>

<DIV style="position: absolute;">
	<TABLE BORDER=1 BGCOLOR="lightblue" WIDTH=200>
		<TR ALIGN="CENTER">
			<TD onmouseover=f(tbf) onmouseout=f2(tbf)>File</TD>
			<TD>Edit</TD>
			<TD>View</TD>
		</TR>
	</TABLE>

	<DIV style="position: absolute;">
		<TABLE ID="tbf" BORDER=1 BGCOLOR="lightblue" WIDTH=80 style="filter:alpha(style=0, opacity=0)">
			<TR><TD>new</TD></TR>
			<TR><TD>close</TD></TR>
			<TR><TD>exit</TD></TR>
		</TABLE>
	</DIV>
</DIV>

walik 12.03.2011 16:23

f('tbf');

DmitryT 12.03.2011 18:14

Так я пробовал,
"f('tbf');"
и так пробовал,
пишет filters.alpha есть null или не является объектом
и id определение отсутствует

walik 12.03.2011 18:23

так перед тем как использовать переменную id, получи сам объект:
elem = document.getElementById(id);
elem.filters.alpha.opacity = count++;

DmitryT 12.03.2011 18:49

сделал так, как Вы написали, теперь пишет
id - определение отсутствует,
странно, пишу alert первой строкой в функцию, он выдает значение переменной id, да и код этот вполне рабочий, все работало без получения объекта, но только правда для img.

yupee 13.03.2011 18:13

мне кажется проблема в "области видимости" когда у тебе исполняется функция st = setTimeout("f(id)",30);
id уже не существует.

DmitryT 14.03.2011 07:58

yupee, видит эта функция id, ниже нее алерт отрабатывает со значением.

рони 14.03.2011 10:46

Возможные варианты передачи параметра ... пример смотреть в ие из-за filter:alpha
<script type="text/javascript">
var count = 0, st = '', st2 = '',elem;
function f(id)
{
  clearTimeout(st2);
  elem = document.getElementById('tbf');
  elem.filters.alpha.opacity = count++;
  st = setTimeout(arguments.callee,30); //оптимальный вариант
  //st = setTimeout(function () {f(id)},30);// нормальный вариант
  //st = setTimeout("f('"+id+"')",30);  // так тоже можно, но не нужно
  if(count == 100) clearTimeout(st);
}
</script>
<div style="position: absolute;">
	<table border=1 bgcolor="lightblue" width=200>
		<tr align="center">
			<td onmouseover="f('tbf')" >file</td>
			<td>edit</td>
			<td>view</td>
		</tr>
	</table>

	<div style="position: absolute;">
		<table id="tbf" border=1 bgcolor="lightblue" width=80 style="filter:alpha(style=0, opacity=0)">
			<tr><td>new</td></tr>
			<tr><td>close</td></tr>
			<tr><td>exit</td></tr>
		</table>
	</div>
</div>

DmitryT 14.03.2011 12:57

рони, за arguments.callee я не знал, Спаси Господи.
Но в elem = document.getElementById('tbf'); я не могу передавать tbf, там должно быть id, из-за того что объект передаваемый в эту функцию не один. Интересно то что алерт показывает значение id везде в функции, а интерпретатору в 7 строке Вашего кода нужен объект.

yupee 14.03.2011 14:13

У тебя получается так: функция f(id) вызывается с аргументом id, ставит саму себя в очередь через 30мс, выполняет дальнейший код( alert) и выключается, соответсвенно удаляя id из памяти. Через 30мс как полагается вызывается эта же функция с новой областью видимости, в которой id неопределено (точнее оно равно строке "id") попробуй сохранять id глобальную переменную и в строке st = setTimeout("f(id)",30); передавать не id а эту глобальную переменную. Я так сделал у меня сработало.


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