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

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

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

Страниц (3): « 1 [2] 3 »
 

11. Furax - 31 Марта, 2008 - 10:39:18 - перейти к сообщению
Systemnik
id должен состоять из цифр, букв и символов "_", причём не может начинаться с цифры. Квадратные скобки в id не допускаются. Обычно делают id в группе объектов типа таких: 'hide0', 'hide1', ... .
id должен быть уникален. document.getElementById() возвращает объект с переданным id, если он существует, причём в единственном экземпляре; если id встречается дважды, то поведение не определено. Массив не возвращается никогда!

Что за конструкция
CODE:
/'
...
...
'/
? В слэшах в JavaScript идут регулярные выражения. Строковый литерал не может распологаться в несколько строк!

Думай ещё. Подмигивание
12. Systemnik - 31 Марта, 2008 - 10:43:56 - перейти к сообщению
Так а ка тогда я должен уместить такой большой код в одну строку... Растерялся

Цитата:
Думай ещё.

Подумаю Улыбка

Цитата:
Массив не возвращается никогда!

А ведь тогда мы с радиобаттонами.. массив получили... Растерялся
тогда.. я даже не представляю что делать дальше..
13. Systemnik - 31 Марта, 2008 - 10:59:48 - перейти к сообщению
Вот это максимум того что я могу сделать

CODE:
<html>
<head>
<title>
Скрытие и показывание текста
</title>
</head>
<body>
<div id="code">
divs
</div>
<div id="code">
divs
</div>
<script language="JavaScript">
function display() {
getElementById('hide'+i).style.display = '';
}
function notdisplay() {
getElementById('hide'+i).style.display = 'none';
}
alert(document.getElementById("code").length);
for(var i=0; i>document.getElementById("code").length; i++) {
document.write('<div id="hide"+i>gf</div>');
document.write('<input type=button onClick="display();" value="Показать">');
document.write('<input type=button onClick="notdisplay();" value="Скрыть">');
}
</script>
</body>
</html>
14. Furax - 31 Марта, 2008 - 21:51:12 - перейти к сообщению
Systemnik пишет:
Так а ка тогда я должен уместить такой большой код в одну строку...
А что, размер строки ограничен?

Systemnik пишет:
А ведь тогда мы с радиобаттонами.. массив получили...
Но ведь там был не getElementById! Это специфичное для радиобатонов поведение...

Итак. Во-первых, убери из кода пару divов, что стоят ещё перед скриптом - они не нужны, коли Ты уже решил генерить divы динамически. Они и используются-то у Тебя только для получения количества тех, что нужно сгенерировать, которое можно просто прописать в переменной.

Во-вторых, функции display() и notdisplay() должны принимать в качестве аргумента номер divа, который надо скрыть/показать - они же не знают, что такое i! Соответствующие кнопки должны этот номер им явно передавать.

В-третьих, в цикле вместо "меньше" написано "больше".

В-четвёртых, вот здесь ошибка: не
CODE:
'<div id="hide"+i>gf</div>'
, а
CODE:
'<div id="hide' + i +'">gf</div>'


И наконец, постоянно делать document.write() тоже нехорошо. Лучше сначала сгенерировать всю строку, забив её в переменную, а уж потом сделать write:
CODE:
var x='';
for (...)
x+='...';
document.write(x);


Думаю, если Ты последуешь этим пяти советам (или даже четырём первым), всё должно заработать.
15. Systemnik - 01 Апреля, 2008 - 04:23:45 - перейти к сообщению
Цитата:
А что, размер строки ограничен?

Так а если я схитрю и напишу так:
CODE:
document.write('string1'+
'string2'+
'string3');

Это будет нормально?? Растерялся
Цитата:
Но ведь там был не getElementById! Это специфичное для радиобатонов поведение...

Стоп значит для объектов с одинаковыми именми массив не возврашается?? Растерялся (кроме радиобаттонов)
Цитата:
которое можно просто прописать в переменной.

такссс...
щас я все разьясню.. я пишу спойлер для форума.. спойлер нужен чтобы сворачивать\разворачиать код..
в файле бб кодес темплейт размешен темплейт ббкода..
тоесть вот такого вида
самый прикол в том что в одном файле таких темплейтов... короче там все ббкоды..
и б и у и коде цитата все все вы спросите как он узнает где нужный??
да я сам удивляюсь.. как..
там стоит коментарии (якобы коментарий)
CODE:
<!--code-->

и когда пп этот код подгружает... он его вообще вырезает.. и так ухнает где нужный ббкод... сложно? очень сложно Огорчение Огорчение
не Фуракс вполне возможно .. тебе это кажется.. ерундой.. короче это уже оффтоп пошел. Улыбка

CODE:
<!--ds-->
<code class="dsd">
{code} (переменная получается из пхп)
</code>
<!df-->

Тоесть если в топики такие блоков десять.. удет вставлятся 10 таких темплейтов..
тк это phpBB 2 у ExBB все чуть проше...
Те два дива перед кодом и указывают на колличество их.. а как я это узнаю в переменной?? Если тока задам сам... но ведь для этого либо нужно получить колличество из пхп.. либо.. незнаю как...
коорче подумав головой я понял.. тут без получения колличества этих блоков..
из пхп... необойтись.. я попробую... получить это самое колличество.. Подмигивание
буду отписыватся в тему если че выложу листинги нужных файлов..
надеюсь вы мне поможете.. Закатив глазки Я напишу этот спойлер для двух любимых форумов ExBB и phpBB 2 (именно 2) Язычок

Цитата:
Во-вторых, функции display() и notdisplay() должны принимать в качестве аргумента номер divа, который надо скрыть/показать - они же не знают, что такое i! Соответствующие кнопки должны этот номер им явно передавать.

Да согласен... ступил.. Растерялся Растерялся
Цитата:
В-четвёртых, вот здесь ошибка: не

пофиксим Подмигивание
16. Systemnik - 01 Апреля, 2008 - 04:41:26 - перейти к сообщению
Так.. во поправил.. какая тоошибка..

CODE:
<html>
<head>
<title>
Скрытие и показывание текста
</title>
</head>
<body>
<script language="JavaScript">
function display(numberd) {
getElementById('hide'+numberd).style.display = '';
}
function notdisplay(numbern) {
getElementById('hide'+numbern).style.display = 'none';
}
var g=5;
for(var i=0; i<g; i++) {
document.write('<div id="hide'+i+'">gf</div>');
document.write('<input type=button onClick="display('+i+');" value="Показать">');
document.write('<input type=button onClick="notdisplay('+i+');" value="Скрыть">');
}
</script>
</body>
</html>

Попробовал переместить цикл.. вперед.. тожесамое.. Растерялся
17. Furax - 01 Апреля, 2008 - 04:52:15 - перейти к сообщению
Systemnik
id должен быть уникален. Без исключений.
name - тоже. Единственное исключение - радиобатоны, которые были разработаны куда раньше JavaScriptа, оттого и морока. Но если радиобатоны имеют id, id обязаны быть разными (в отличие от name).

Насчёт нескольких строк: лучше делать document.write() в самом конце, т. е. не в цикле, а после него. На производительность положительно влияет.

Очевидно, если PHP генерирует divы, то он и должен давать им уникальные id. Хотя возможен обходной манёвр: например, если PHP всем нужным Тебе блокам прописывает class="myBlock" (и только им!), можно в начале документа добавить такой код, а в конце вызвать функцию fillDivs():
CODE:
var divs=[];

function fillDivs()
{
var i, allDivs = document.getElementsByTagName('div');
for (i=0; i<allDivs.length; i++)
if (allDivs[i].className == 'myBlock')
divs.push(allDivs[i]);
}


После этого глобальный массив divs будет содержать указатели на все объекты divов с классом myBlock (по-моему, как раз в порядке следования в коде - проверь!). Тогда можно будет делать так:
CODE:
function show(Index)
{
if (divs[Index])
divs[Index].style.display='block';
}
if нужен для того, чтобы не возникала ошибка, если массив ещё не заполнен.
18. Furax - 01 Апреля, 2008 - 04:55:16 - перейти к сообщению
Systemnik
getElementById() - это не функция, а метод объекта document. Стало быть, надо писать document.getElementById(...).
19. Systemnik - 01 Апреля, 2008 - 08:25:02 - перейти к сообщению
Цитата:
раньше JavaScriptа,

интересненько.. кто же их тогда обрабатывал?? Ведь php и в помине небыло..
Растерялся (только компилируемые??)
Цитата:
getElementById() - это не функция, а метод объекта document. Стало быть, надо писать document.getElementById(...).

ОК
Цитата:
Насчёт нескольких строк: лучше делать document.write() в самом конце, т. е. не в цикле, а после него. На производительность положительно влияет.

Стоп.. если я напишу не вцикле.. то у меня будет не много кнопок а две..
а мне надо на каждый див 2 кнопки...
20. Systemnik - 01 Апреля, 2008 - 08:33:12 - перейти к сообщению
Угу.. щас.. спасибо попробую..

У меня вопрос.. как средствами пхп сгенерировать рандомное число?? Растерялся

Форум на AlfaSpace.NET


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

[Script Execution time: 0.0414]     [ 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