Strict Standards: Resource ID#27 used as offset, casting to integer (27) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#29 used as offset, casting to integer (29) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#30 used as offset, casting to integer (30) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: setTimeout и кавычки
ТвойWeb » WebMaster класс » JavaScript » setTimeout и кавычки

Страниц (1): [1]
 

1. kr12 - 06 Июня, 2005 - 01:26:19 - перейти к сообщению
1. Как передать больше одного значения функции, вызываемой методом setTimeout?
setTimeout(funktionX(N,N1),1000) - не подходит.
setTimeout('funktionX('+N+','+N1+'Подмигивание',1000) - то же.
Можно конечно при первом вызове (if x==0) funktionX присвоить значения N и N1 глобальным переменным и х=1, а setTimeout('funktionX('+х+'Подмигивание',1000), как сейчас и происходит. Или свести N, N1... в одну переменную и потом её разделять. Но должен же быть способ проще?
2. onMouseOver="JavaScript:setTimeout('this.bgColor=#ccffcc',300)" Естественно #ccffcc должно быть в кавычках, но как? (пробовал много вариантов)
2. ETC - 06 Июня, 2005 - 01:31:24 - перейти к сообщению
Есть одинарные, а есть двойные кавычки... в крайнем случае используй обратный слеш:
CODE:

setTimeout('this.bgColor="#ccffcc"',300);
или
setTimeout("this.bgColor=\"#ccffcc\"",300)

kr12 пишет:
setTimeout('funktionX('+N+','+N1+'Подмигивание',1000) - то же

Почему не подходит? А должно, иначе никак.
3. Дмитрий Б. - 06 Июня, 2005 - 03:44:56 - перейти к сообщению
Вообще, первым параметром функций setTimeout() и setInterval() является строка, которую следует запустить [запускать] на выполнение, оформленная по всем правилам JScript. Т. е., если мы хотим вызвать функцию setTimeout(), например, вот так:
CODE:
setTimeout(x, t);

- то в переменной t должно содержаться время в милисекундах, а в переменной x - строка с командой на JScript. То есть, если мы хотим, чтобы был выполнен код:
CODE:
funktionX(100, 'Петя', 'Крейсер \"Аврора\"');

- нужно обеспечить, чтобы при выполнении команды alert(x) мы увидели именно этот текст, именно в такой орфографии. То есть, если твоя переменная N1 - строка, то и написать тебе надо так:
CODE:
setTimeout('funktionX('+N+',\"'+jstext(jstext(N1))+'\")',1000)

- где функция jstext должна принимать строку и заменять в ней, например, \ на \\ и т. д., например, так:
CODE:
function jstext(s)
{
return s.split('\\').join('\\\\').split("'").join("\\'").split('"').join('\\"').split('\n').join('\\n').
split('\r').join('\\r').split('\t').join('\\t');
}

Функция jstext вызывается дважды, т. к. у нас тут случай "матрёшка": строка в строке.
И это всё учитывая, что в параметрах HTML-тегов кавычки, в которые заключён параметр, недопустимы даже после обратных слэшей, так что вертеться придётся с одним сортом. А если тебе надо передать массив или объект даты, или ещё покруче... Сделай эту переменную сразу глобальной, и напиши:
CODE:
setTimeout('funktionX('+N+', N1)',1000)

А вообще, с setTimeout'ом - это сплошной геморрой...

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0249]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33