HTML+JS: name d IE

Vyacha

есть инпут

<div id="bbb">
<input type="text" id="aaa" >
<input type="button" onclick="f1" >
</div>

и есть функция

function f1 {
alert( document.getElementsByName('ccc').length );
alert( document.getElementsByName('zzz').length );
document.getElementById('aaa').name = "zzz";
alert( document.getElementsByName('ccc').length );
alert( document.getElementsByName('zzz').length );
}

в IE6 выводит
1
0
1
0
innerHTML Тоже не меняется
почему так и главное! как это преодолеть?
в опере и файрфоксе такого эффекта нет

pitrik2

непонятно что ты хочешь
что такое ccc ?

Commandor

http://forum.ixbt.com/topic.cgi?id=24:39018
а вообще не пользуйся этим. пользуйся id-шниками

Vyacha

прошу прощения, описАлся

<input type="text" id="aaa" name="ccc">

id это конечно хорошо, здорово и вечно, но у меня контролы генерятся жабаскриптом, а потом на сервере нужно получить их значения, а они вроде по name-у доступны ... или я чего-то не понимаю?

pitrik2

id это конечно хорошо, здорово и вечно, но у меня контролы генерятся жабаскриптом, а потом на сервере нужно получить их значения, а они вроде по name-у доступны ... или я чего-то не понимаю?
пускай жаваскрипт генерит и id и name
id будешь использовать для джаваскрипта на странице
name будешь использовать для передачи серверу

Vyacha

хм, ну так я это и делаю.
и проблема именно в том, что я name генерю, а он остаётся темже ( в ИЕ )

pitrik2

я name генерю
как ты это делаешь?
name можно генерить токо при создании элемента, т.е. менять его потом нельзя
т.е. вот это:
document.getElementById('aaa').name = "zzz"; 

делать нельзя

Vyacha

мдам, беда :(
дело в том, что генерю я их следующим образом:
есть скрытый образец (заранее неизвестно какой например:

<tr style="display:none" id="aaa">
<td><input type="text" id="aaa_txt"></td>
<td><select id="aaa_ddl">...</select></td>
<td><textarea id="aaa_tbox">....</textarea></td>
</tr>

функция принимает его в качестве параметра
копирует при помощи node.cloneNode(true); и рекурсивно пробегает заменяя aaa_ На aaa_1_, aaa_2_ итд
тоесть, чтобы всё работало мне нужно пробегать по дереву, генерить каждый узел с помощью createElement и копировать все атрибуты? :(

pitrik2

ладна
в таком случае разрешаю тебе менять name на лету :)
ток меняй его через setAttribute('name') а не через прямое присвоение
и не используй функцию getElementsByName вообще

Commandor

Если серверную часть тоже ты делаешь ты, то имхо проще сделать образец типо
<tr style="display:none" id="aaa">
<td><input type="text" name="aaa[]"></td>
<td><select name="bbb[]">...</select></td>
<td><textarea name="ccc[]">....</textarea></td>
</tr>

и просто его клонировать без всяких пробеганий - пусле субмита формы на сервер будут приходить aaa,bbb,ccc в виде массивов

kruzer25

пусле субмита формы на сервер будут приходить aaa,bbb,ccc в виде массивов
Афаик это зависит от того, какой из серверных языков он использует, чем пользуется для парсинга GET/POST-запросов.
Вполне возможно, что такого вообще нигде нет, кроме PHP.

pitrik2

ну и что за хрень ты тут написал?
ты думаешь что http это часть php?

kruzer25

Нет, конечно.
HTTP - это HTTP, и я не уверен, что в нём вообще как-то определено то, что называется "search string" - то, что между ? и # в строке запроса или содержимое данных POST.
А как уж там сервер будет разбираться, что именно означает aaa[]=b&aaa[]=c - точно нигде не стандартизировано.

pitrik2

точно нигде не стандартизировано
тоесть если чтото не стандартизировано то об этом нужно пиздеть на форуме?

kruzer25

Если что-то совершенно не стандартизировано и ни в каких общих местах не описывается, а является лишь фичей конкретного языка - это повод предупредить об этом слушателей, если им только что кто-то посоветовал это, как решение их проблемы, без указания того, что для этого надо пользоваться этим конкретным языком.

pitrik2

плохая у тебя позиция
лучше бы она была такой:
Если есть повод дать дурацкий совет, то лучше его не давать.
вот аналогия того что ты посоветовал:
Весь наш мир это иллюзия, вполне возможно что только php не иллюзия
вот аналогия твоего ответа на вопрос зачем ты это сделал:
Весь наш мир иллюзия - это повод предупредить об этом слушателей, если им кто-то посоветовал что-то, как решение их проблемы, без указания того что все бессмысленно в иллюзорном мире

kruzer25

Ты совсем тупой?
Ты сказал человеку - "сделай вот так, и у тебя всё заработает".
Я уточнил - "заработает только если ты используешь PHP".
Всё конкретно, никаких иллюзий.
Что тебе не нравится?

pitrik2

в такой формулировке
Ты сказал человеку - "сделай вот так, и у тебя всё заработает".
Я уточнил - "заработает только если ты используешь PHP".
Что тебе не нравится?
не нравится слово "только"
это вранье, что ни в одном другом языке это не заработает
а без слова только эта фраза не несет смысловую нагрузку

Commandor

Ты сказал человеку - "сделай вот так, и у тебя всё заработает".
Сказал не он, а я. И я так, как ты процитировал, не говорил. Я предложил вариант, который поддерживается браузерами и http-серверами. А дальше уже топикстартеру разбираться поддерживает его язык такое или нет. Мой ответ предполагает дальнейший гуглинг и тестинг - никакой конкретики в нем не было.
По теме топика уже разобрались ( ответил достаточно полно а дальше уже можно можно развивать тему и предлагать альтернативные конструкции и решения.

kruzer25

Я предложил вариант, который поддерживается браузерами и http-серверами
Говорить "поддерживается браузерами" в данном случае нельзя - точно так же, .exe-файлы поддерживаются линуксом (и вообще практически любой ОС - ведь можно хранить в файловой системе эти .exe-файлы!)
Потому что для браузеров и http-серверов такая запись не имеет абсолютно никакой смысловой нагрузки. Им насрать, что ты там напишешь в атрибуте name (точнее, на это насрать браузерам, а http-серверы даже и не знают о том, что строка запроса - это какие-то там имена параметров и их значения).

kruzer25

не нравится слово "только"
это вранье, что ни в одном другом языке это не заработает
"Только" я сказал уже в самом конце, чтобы до тебя дошло.
Да, возможно, кроме PHP, ещё несколько языков таким же образом обработают эту конструкцию. И что, теперь можно её советовать без какого-либо указания того, как это использовать.

Vyacha

не ссорьтесь!
я юзаю аспнет, достаю из Request.Form
естественно, aaa[] не прокатит
getElementsByName - привёл только как иллюстрацию того что ие что-то не то делает, в реальном коде я его естественно не пользую
между setAttribute("name",...) и просто .name = ... никакой разницы не обнаружено
теперь положительный момент: оказывается косяк проявляется только на клиентской стороне - на сервер отправляются значения под теми именами, которые я присвоил - для текущей задачи мне этого достаточно.
всем спасибо за внимание и посильную помощь ;)

pitrik2

естественно, aaa[] не прокатит
как это "естественно не прокатит"?
Request.Form.GetValues('aaa') - это и есть массив значений
пришлось изза тебя гугл открывать :) на апс.нет код впервые увидел :)
2: ну я правда не знаю ни один широкораспространенный язык где бы это не было массивом

Dasar

Request.Form.GetValues('aaa') - это и есть массив значений
для того чтобы это работало, name должен быть просто aaa без всяких скобок
ps
скобки это чисто php-шная фигня
Оставить комментарий
Имя или ник:
Комментарий: