<script language="JavaScript">
var t = {4: "test1",
"key2": "350",
10: "test3"};
</script>
<form name=frm...>
<input type=hidden name="t[]">
...
</form>
---------------------------
надо передать "t[]" = значение массива t. Как?!
document.frm.t.value = t; // не проходит
document.frm.t[].value = t; // ошибка
как это делается в JS?
><script language="JavaScript">
>var t = {4: "test1",
> "key2": "350",
> 10: "test3"};
></script>
><form name=frm...>
><input type=hidden name="t[]">
>...
></form>
>---------------------------
>надо передать "t[]" = значение массива t. Как?!
>document.frm.t.value = t; // не проходит
>document.frm.t[].value = t; // ошибка
>как это делается в JS?Читать про массивы. Такой конструкции для массивов в яваскрипт нет.
Как-то так:
document.forms["frm"].t.value = t[0];
>><script language="JavaScript">
>>var t = {4: "test1",
>> "key2": "350",
>> 10: "test3"};
>></script>
>><form name=frm...>
>><input type=hidden name="t[]">
>>...
>></form>
>>---------------------------
>>надо передать "t[]" = значение массива t. Как?!
>>document.frm.t.value = t; // не проходит
>>document.frm.t[].value = t; // ошибка
>>как это делается в JS?
>
>Читать про массивы. Такой конструкции для массивов в яваскрипт нет.
какой конструкции нет?
>Как-то так:
>document.forms["frm"].t.value = t[0];
передать массив я могу http://...cgi?t=1&t=2&t=3
а как его собрать в name=t[] в js?
>>><script language="JavaScript">
>>>var t = {4: "test1",
>>> "key2": "350",
>>> 10: "test3"};
>>></script>
>>><form name=frm...>
>>><input type=hidden name="t[]">
>>>...
>>></form>
>>>---------------------------
>>>надо передать "t[]" = значение массива t. Как?!
>>>document.frm.t.value = t; // не проходит
>>>document.frm.t[].value = t; // ошибка
>>>как это делается в JS?
>>
>>Читать про массивы. Такой конструкции для массивов в яваскрипт нет.
>какой конструкции нет?
>>Как-то так:
>>document.forms["frm"].t.value = t[0];
>передать массив я могу http://...cgi?t=1&t=2&t=3
>а как его собрать в name=t[] в js?м-да, как все запущенно.
>м-да, как все запущенно.
здесь не принято так выражаться. По существу что-нибудь скажите?
>надо передать "t[]" = значение массива t. Как?!
>document.frm.t.value = t; // не проходит
>document.frm.t[].value = t; // ошибка
>как это делается в JS?Ошибка возникает потому, что значением (value) элемента формы может быть только строка, но не массив. Следовательно, перед присваиванием нужно сделать из массива строку. Этого можно достичь разными способами в зависимости от сложности исходного массива. Общее решение - реализовать на JS аналог PHP'шных функций serialize/unserialize. Наверняка где-нибудь в инете есть готовые решения этой задачи.
>>надо передать "t[]" = значение массива t. Как?!
>>document.frm.t.value = t; // не проходит
>>document.frm.t[].value = t; // ошибка
>>как это делается в JS?
>
>Ошибка возникает потому, что значением (value) элемента формы может быть только строка,
>но не массив. Следовательно, перед присваиванием нужно сделать из массива строку.
>Этого можно достичь разными способами в зависимости от сложности исходного массива.
>Общее решение - реализовать на JS аналог PHP'шных функций serialize/unserialize. Наверняка
>где-нибудь в инете есть готовые решения этой задачи.а почему так не проходит?:
document.frm.t[0].value = t[0];
>а почему так не проходит?:
>document.frm.t[0].value = t[0];Потому что у элемента "t" нет свойства "0". Да и вообще элемента с именем "t" нет.
Если же вернуться к исходному примеру, то это вот совсем неправильно:
document.frm.t.value = t;
а вместо такого:
document.frm.t[].value = t;
корректно писать так:
document.frm["t[]"].value = t;
Это сработает без ошибок, но результат будет немного не тот - свойству value будет присвоено значение "[object Object]" (это в FF). А всё потому, что t - это массив, а ожидается строка, вот JS и перегоняет его в строку, как умеет, а умеет плохо :)
>>а почему так не проходит?:
>>document.frm.t[0].value = t[0];
>
>Потому что у элемента "t" нет свойства "0". Да и вообще элемента
>Это сработает без ошибок, но результат будет немного не тот - свойству
>value будет присвоено значение "[object Object]" (это в FF). А всё
>потому, что t - это массив, а ожидается строка, вот JS
>и перегоняет его в строку, как умеет, а умеет плохо :)
>
а хоть как-то возможно присвоить хоть какое-то значение для t[] (на js)?
<input type=hydden name="t[]">
или просто нельзя использовать name=t[], если хочешь использовать js для ее заполнения?
>а хоть как-то возможно присвоить хоть какое-то значение для t[] (на js)?
>
><input type=hydden name="t[]">
>или просто нельзя использовать name=t[], если хочешь использовать js для ее заполнения?Можно, так, например:
document.frm["t[]"].value = "какая-нибудь строка";
Эта конструкция прокатит на ура. Если ты знаком с синтаксисом JS, то должен знать, что такие вот две записи:
foo.bar
foo["bar"]в общем-то эквивалентны и обозначают одно и то же. Разница только в границах их применимости - если вторая может применяться для элементов с какими угодно именами, то первая - только для элементов, чьи имена являются правильными идентификаторами.
foo["qq"], foo["t[]"] и foo["-*-"] - правильно
foo.qq - правильно,
foo.t[] - синтаксически верно, но обозначает не то
foo.-*- - неправильно
>>а хоть как-то возможно присвоить хоть какое-то значение для t[] (на js)?
>>
>><input type=hydden name="t[]">
>>или просто нельзя использовать name=t[], если хочешь использовать js для ее заполнения?
>
>Можно, так, например:
>
>document.frm["t[]"].value = "какая-нибудь строка";
>
>Эта конструкция прокатит на ура. Если ты знаком с синтаксисом JS, то
>должен знать, что такие вот две записи:
>
> foo.bar
> foo["bar"]
>
>в общем-то эквивалентны и обозначают одно и то же. Разница только в
>границах их применимости - если вторая может применяться для элементов с
>какими угодно именами, то первая - только для элементов, чьи имена
>являются правильными идентификаторами.
>
>foo["qq"], foo["t[]"] и foo["-*-"] - правильно
>
>foo.qq - правильно,
>foo.t[] - синтаксически верно, но обозначает не то
>foo.-*- - неправильноСпасибо. Как я понял, работать с массивами норамьно в js не получится. Надо будет работать со строками...