За последние 24 часа нас посетили 16627 программистов и 1592 робота. Сейчас ищут 1327 программистов ...

Почему функции работают неправельно?

Тема в разделе "JavaScript и AJAX", создана пользователем Mr.M.I.T., 30 авг 2008.

  1. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Ох уж этот джава скрипт...
    Есть 2 функции
    [js]function add() {
    document.getElementById('vfild').innerHTML+="<span name='fild'><table width=100%><tr><td>&nbsp;</td><td><input type=text name=vars[] value='' size=30></td><tr><td>Комментарий(не обязательно)</td><td><input type=text name=admin_say[] size=30></td></table></span>";
    }
    function del() {
    var res='';
    var vars=document.getElementsByName('fild');
    for(i=0;i<vars.length-1;i++) {
    res+=vars.innerHTML;
    }
    document.getElementById('vfild').innerHTML=res;
    }[/js]
    Первая не созраняет value элементов
    Вторая, при первом клике работает как надо, а при втором удаляет сразу все элементы
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    [js]function del() {
    var o = document.getElementById('vfild');
    if(o.childNodes.length)
    o.removeChild(o.lastChild);
    else
    alert('не мучай кнопку!');
    }[/js]
    ты б не новую таблицу каждый раз создавал, а, хотя бы, ряд в 1 большой
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ои...
    даже не знаю что за removeChild и lastChild но работает! =)
    А как быть с первой?
    повторюсь, там при нажатии всё что было до этого введено удаляется....
    всмысле?
    новый <tr>? впринципе без разницы...
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    вообще, копай в сторону DOM (Document Object Model). Много вопросов отпадёт. Или тот же jQuery или Prototype заюзай.

    В твоём случае чтобы всё не переделывать, можно так сделать:
    [js]
    function SaveValue(fields)
    {
    var val = new Array();
    var o = document.getElementsByName(fields);
    if(o.length)
    for(var i=0;i<o.length;i++)
    val = o.value?o.value:'';
    return val;
    }
    function ReturnValue(fields,arr)
    {
    var o = document.getElementsByName(fields);
    if(o.length && arr.length)
    for(var i=0;i<o.length-1;i++)
    o.value = arr;
    return 1;
    }
    function add() {
    var o = document.getElementById('vfild');
    var val1 = new Array();
    var val2 = new Array();
    val1 = SaveValue('vars[]');
    val2 = SaveValue('admin_say[]');

    o.innerHTML+="<span name='fild'><table width=100%><tr><td>&nbsp;</td><td><input type=text name=vars[] value='' size=30></td><tr><td>Комментарий(не обязательно)</td><td><input type=text name=admin_say[] size=30></td></table></span>";
    ReturnValue('vars[]',val1);
    ReturnValue('admin_say[]',val2);
    }
    [/js]
    но это всё костыль, не имеющий, в принипе, права на существование.
     
  5. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Блин,жесть скрипт =)
    Вообще не понятно, почему value не сохраняются, я же не заменяю полностью поле vfild а добавляю в конец новый элемент...
    ну ни чё =)
    главное работает! так что огромное спасибо, выручил =)
    яб сам такого не написал...
     
  6. BS

    BS Активный пользователь

    С нами с:
    10 апр 2008
    Сообщения:
    149
    Симпатии:
    0
    Наверное потому, что в innerHTML value - пустое. Не проверял? Я так понимаю, что в innerHTML хранится текст, который содержался на странице при загрузке или после последнего изменения innerHTML или иным способом изменения структуры страницы. Все остальные манипуляции с контролами, как то выбор пользователем значения или изменение его при помощи java-скрипта изменяют лишь dom, но в тексте не отображаются.