12.03.2011, 16:00
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
передача параметра в функцию
Здравствуйте делаю своеобразное меню по 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>
|
|
12.03.2011, 16:23
|
|
Профессор
|
|
Регистрация: 09.11.2009
Сообщений: 1,101
|
|
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
|
|
12.03.2011, 18:14
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
Так я пробовал,
"f('tbf');"
и так пробовал,
пишет filters.alpha есть null или не является объектом
и id определение отсутствует
|
|
12.03.2011, 18:23
|
|
Профессор
|
|
Регистрация: 09.11.2009
Сообщений: 1,101
|
|
так перед тем как использовать переменную id, получи сам объект:
elem = document.getElementById(id);
elem.filters.alpha.opacity = count++;
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
|
|
12.03.2011, 18:49
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
сделал так, как Вы написали, теперь пишет
id - определение отсутствует,
странно, пишу alert первой строкой в функцию, он выдает значение переменной id, да и код этот вполне рабочий, все работало без получения объекта, но только правда для img.
|
|
13.03.2011, 18:13
|
Интересующийся
|
|
Регистрация: 27.01.2011
Сообщений: 21
|
|
мне кажется проблема в "области видимости" когда у тебе исполняется функция st = setTimeout("f(id)",30);
id уже не существует.
Последний раз редактировалось yupee, 13.03.2011 в 18:22.
|
|
14.03.2011, 07:58
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
yupee, видит эта функция id, ниже нее алерт отрабатывает со значением.
|
|
14.03.2011, 10:46
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Возможные варианты передачи параметра ... пример смотреть в ие из-за 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>
|
|
14.03.2011, 12:57
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
рони, за arguments.callee я не знал, Спаси Господи.
Но в elem = document.getElementById('tbf'); я не могу передавать tbf, там должно быть id, из-за того что объект передаваемый в эту функцию не один. Интересно то что алерт показывает значение id везде в функции, а интерпретатору в 7 строке Вашего кода нужен объект.
|
|
14.03.2011, 14:13
|
Интересующийся
|
|
Регистрация: 27.01.2011
Сообщений: 21
|
|
У тебя получается так: функция f(id) вызывается с аргументом id, ставит саму себя в очередь через 30мс, выполняет дальнейший код( alert) и выключается, соответсвенно удаляя id из памяти. Через 30мс как полагается вызывается эта же функция с новой областью видимости, в которой id неопределено (точнее оно равно строке "id") попробуй сохранять id глобальную переменную и в строке st = setTimeout("f(id)",30); передавать не id а эту глобальную переменную. Я так сделал у меня сработало.
Последний раз редактировалось yupee, 14.03.2011 в 14:23.
|
|
|
|