Показано с 1 по 3 из 3

Тема: Javascript:length - количество элементов на форме

  1. #1

    Регистрация
    06.12.2006
    Сообщений
    50
    Есть форма с именем order_details, в форме присутствует один checkbox с именем order_checkbox.
    Дело в том что когда чекбокс один - document.order_details.order_checkbox.length возвращает - undefined, когда чекбокса два или более document.order_details.order_checkbox.length - возвращает всё нормально - количество элементов с именем order_checkbox. Что за бред ? почему в первом случае undefined ?

  2. #2

    Регистрация
    11.02.2007
    Адрес
    Донецк, Украина
    Сообщений
    96
    никакого бреда в этом нету. единственное, что тут некорректно, так это то, что ты даешь элементам формы одинаковые имена )) - этого надо мягко говоря избегать, т.к. плохой стиль.

    а теперь объясню почему именно такой результат. вот создал ты чекбокс (т.е. Input по сути). с чего ты взял что у него есть свойство length? разве это массив или строка?? нет. это все равно что ты напишешь

    var i=0; alert(i.length);

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

    зы Если быть точным, то в Gecko чекбокс - это HTMLInputElement, а много чекбоксов - это NodeList. вобще узнать тип объекта можно с помощью оператора typeof

  3. #3

    Регистрация
    29.12.2009
    Сообщений
    1
    Лично я решил проблему просто:

    Есть у меня таблица, в конце каждой строки которой чекбокс, есть вверху кнопка "Удалить отмеченные".

    Таблица находится внутри формы fchk, у каждого чекбокса в конце строки имя ids[] и соответствующее строке значение. Количество чекбоксов зависит от кол-ва строк в таблице.

    Есть функция, которой по нажатию кнопки передаётся путь (rel) и массив или один чекбокс (ids) вот таким образом:

    <div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-spacere;overflow:auto'>onclick="askquest2(&#39;user_rep s&#39;,document.fchk[&#39;ids[]&#39;])"</div>

    Сама функция ниже:

    <div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-spacere;overflow:auto'>function askquest2(rel,ids) {
    if (ids != null) {
    var id1="";
    if (ids.value > 0) { //значит один элемент, иначе свойство было бы undefined
    if (ids.checked) id1 +=ids.value + ",";
    }
    else { //если undefined, значит массив элементов
    for (var i=0; i < ids.length; i++) {
    if (ids[i].checked) id1 +=ids[i].value + ",";
    }
    }
    if (id1 != "") {
    if (window.confirm(&#39;Удалить отмеченные?&#39) {
    id1 = id1.substring(0,(id1.length-1));
    window.open(&#39;main.php?rel=&#39;+rel+&#39;&tp=d el&ids=&#39;+id1,&#39;_self&#39;
    }
    } else {
    alert(&#39;Вы ничего не выбрали!&#39;
    return false;
    }
    } else {
    alert(&#39;Вы ничего не выбрали!&#39;
    return false;
    }
    }</div>

Похожие темы

  1. Кроссбраузерность элементов дизайна.
    от ivan2006bip в разделе Дизайн сайтов
    Ответов: 5
    Последнее сообщение: 05.03.2012, 19:25
  2. наложение объекта по форме
    от uffffff в разделе Векторная графика
    Ответов: 0
    Последнее сообщение: 11.07.2010, 21:24
  3. Количество столбцов в зависимости от разрешения.
    от russum в разделе Веб-программирование
    Ответов: 2
    Последнее сообщение: 02.06.2008, 11:34
  4. Ответов: 5
    Последнее сообщение: 31.05.2007, 18:48
  5. Проверка radio button в форме
    от allmoney.ws в разделе Веб-программирование
    Ответов: 1
    Последнее сообщение: 22.03.2007, 13:18

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •