The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
как передать именнованный массив, !*! kvk, 20-Мрт-06, 17:21  [смотреть все]
<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?
  • как передать именнованный массив, !*! lx, 20:07 , 20-Мрт-06 (1)
    ><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];


    • как передать именнованный массив, !*! konst, 20:14 , 20-Мрт-06 (2)
      >><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?
      • как передать именнованный массив, !*! lx, 20:19 , 20-Мрт-06 (3)
        >>><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?

        м-да, как все запущенно.

  • только как строку, !*! XAnder, 09:03 , 21-Мрт-06 (5)
    >надо передать "t[]" = значение массива t. Как?!
    >document.frm.t.value = t; // не проходит
    >document.frm.t[].value = t; // ошибка
    >как это делается в JS?

    Ошибка возникает потому, что значением (value) элемента формы может быть только строка, но не массив. Следовательно, перед присваиванием нужно сделать из массива строку. Этого можно достичь разными способами в зависимости от сложности исходного массива. Общее решение - реализовать на JS аналог PHP'шных функций serialize/unserialize. Наверняка где-нибудь в инете есть готовые решения этой задачи.

    • только как строку, !*! konst, 13:27 , 21-Мрт-06 (6)
      >>надо передать "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];

      • дык, не должно так проходить, !*! XAnder, 16:32 , 21-Мрт-06 (7)
        >а почему так не проходит?:
        >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 и перегоняет его в строку, как умеет, а умеет плохо :)

        • дык, не должно так проходить, !*! konst, 18:16 , 21-Мрт-06 (8)
          >>а почему так не проходит?:
          >>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 для ее заполнения?

          • можно, но есть ньюансы, !*! XAnder, 08:47 , 22-Мрт-06 (9)
            >а хоть как-то возможно присвоить хоть какое-то значение для 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.-*- - неправильно

            • можно, но есть ньюансы, !*! konst, 14:14 , 22-Мрт-06 (10)
              >>а хоть как-то возможно присвоить хоть какое-то значение для 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 не получится. Надо будет работать со строками...




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру