Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.03.2011, 16:00
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 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>
Ответить с цитированием
  #2 (permalink)  
Старый 12.03.2011, 16:23
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

f('tbf');
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #3 (permalink)  
Старый 12.03.2011, 18:14
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

Так я пробовал,
"f('tbf');"
и так пробовал,
пишет filters.alpha есть null или не является объектом
и id определение отсутствует
Ответить с цитированием
  #4 (permalink)  
Старый 12.03.2011, 18:23
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

так перед тем как использовать переменную id, получи сам объект:
elem = document.getElementById(id);
elem.filters.alpha.opacity = count++;
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #5 (permalink)  
Старый 12.03.2011, 18:49
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

сделал так, как Вы написали, теперь пишет
id - определение отсутствует,
странно, пишу alert первой строкой в функцию, он выдает значение переменной id, да и код этот вполне рабочий, все работало без получения объекта, но только правда для img.
Ответить с цитированием
  #6 (permalink)  
Старый 13.03.2011, 18:13
Интересующийся
Отправить личное сообщение для yupee Посмотреть профиль Найти все сообщения от yupee
 
Регистрация: 27.01.2011
Сообщений: 21

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

Последний раз редактировалось yupee, 13.03.2011 в 18:22.
Ответить с цитированием
  #7 (permalink)  
Старый 14.03.2011, 07:58
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

yupee, видит эта функция id, ниже нее алерт отрабатывает со значением.
Ответить с цитированием
  #8 (permalink)  
Старый 14.03.2011, 10:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Возможные варианты передачи параметра ... пример смотреть в ие из-за 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>
Ответить с цитированием
  #9 (permalink)  
Старый 14.03.2011, 12:57
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

рони, за arguments.callee я не знал, Спаси Господи.
Но в elem = document.getElementById('tbf'); я не могу передавать tbf, там должно быть id, из-за того что объект передаваемый в эту функцию не один. Интересно то что алерт показывает значение id везде в функции, а интерпретатору в 7 строке Вашего кода нужен объект.
Ответить с цитированием
  #10 (permalink)  
Старый 14.03.2011, 14:13
Интересующийся
Отправить личное сообщение для yupee Посмотреть профиль Найти все сообщения от yupee
 
Регистрация: 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.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача в функцию переменного количества аргументов Эдди Элементы интерфейса 35 09.11.2018 15:25
Передача объекта как параметра функции Fenec jQuery 3 05.01.2011 18:22
передача имени элемента в функцию Zubik Общие вопросы Javascript 0 06.10.2009 11:00
передача динамических данных в функцию Ruah Общие вопросы Javascript 4 02.09.2009 22:04
Передача параметра из checkbox в asp страницу artwalek AJAX и COMET 3 11.08.2009 14:24