Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с добавлением полей, В Mozille не функционирует!!! 
V
    Опции темы
S696S
Дата 13.11.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 13.11.2006

Репутация: нет
Всего: нет



Такая ситуация. Существуют в форме некие поля для заполнения(name=answer_n). Из этих форм значение передаются методом POST другому скрипту. Всего на странице пара текстовых полей. Для того чтобы добавить следующие поля существует Java-скрипт.

Код

function add_form_filed ()
{
    count++;
    e = document.getElementById('next');
    var temp = e.innerHTML;
    var ntemp='<table>';
    <?php
    for ($i=0;$i<$qwer;$i++)
    {
    ?>
    ntemp = ntemp + '<tr>';
    ntemp = ntemp + '<td ><input type="text" name="answer' + count + ' " ></td></tr>';
    <?php
    }
    ?>
    ntemp = ntemp + '</table>';
    e.innerHTML = temp + ntemp;
}

 
В Эксплорере всё работает идеально: данные записываются и передаются, сколько бы полей не добавили. В Мозилле же, когда добавляются новые поля, то:
1)значения предыдущих полей удаляются(поля становятся пустыми), кроме тех, что изначально были на странице.
2)даже если сначала нащелкать много полей, а потом их все заполнить, то дальше передаются только значения полей, которые были изначально на странице.

В Опере та же ситуация.

С чем это может быть связано и как это разрешить?

PM MAIL   Вверх
SelenIT
Дата 14.11.2006, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



S696S, скорее всего дело в том, что изменение innerHTML ведет к перестройке существующей структуру DOM, к тому же (насколько мне известно) все браузеры не любят работать с таблицами через innerHTML. Лучше добавлять новый элемент стандартным DOM-методом appendChild.
Например:
Код

function add_form_filed()
{
    var table, tbody, tr, td, inp, addcount=<?php echo $qwer; ?>;
    if(!add_form_filed.count) add_form_filed.count = 0;
    table = document.createElement('table');
    table.appendChild(tbody = document.createElement('tbody'));
    for (var i=add_form_filed.count; i< add_form_filed.count+addcount; i++) {
       tbody.appendChild(tr = document.createElement('tr'));
       tr.appendChild(td = document.createElement('td'));
       td.appendChild(inp = document.createElement('input'));
       inp.type = "checkbox";
       inp.name = "answer" + i; // или просто "answer[]", смотря как потом обрабатывать
    }
    document.getElementById('next').appendChild(table);
    add_form_filed.count += addcount;
}



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
pythonwin
Дата 14.11.2006, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



S696S, сделай лучше через DOM, но если нужно именно через innerHTML, то обратись к dstorm81 smile
PM WWW GTalk Jabber   Вверх
Burrr
Дата 14.11.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



S696S, можно действительно сделать скрипт добавляя узлы к DOM-дереву, но твой код также можно довести до рабочего состояния, при этом нужно поменять всего лишь верстку.
Я почти уверен, что тег form у тебя стоит между тегами table-tr или tr-td, что-то типа:
Код
<table><form>
  <tr>
    <td>1111</td>
    <td>1111</td>
  </tr>
</form></table>

, чтобы не создавалось отступа в ИЕ. Переправь весртку на следующую:
Код
<form style="margin:0;"><table>
  <tr>
    <td>1111</td>
    <td>1111</td>
  </tr>
</table></form>

и значения новых полей будут пердаваться на сервер в Опере и Гекко. Теряются они как раз из-за неправильной перестройки ДОМ-дерева, с новой версткой структура будеит верной.
Пример такого работающего кода можно посмотреть здесь. Жми добавить получателя.

Это сообщение отредактировал(а) Burrr - 14.11.2006, 11:27


--------------------
PM MAIL ICQ   Вверх
S696S
Дата 17.11.2006, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 13.11.2006

Репутация: нет
Всего: нет



Решено. Всем спасибо. smile 
PM MAIL   Вверх
_lleopard_
Дата 27.4.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 18.4.2007

Репутация: нет
Всего: нет



Не хотелось тему создавать т.к. вопрос примерно с тогоже огорода. Скажите пожалуйста кто знает, а как можно удалить какой либо элемент? Вот создал я каким либо образом строку <tr> </tr> и что то так внутри. Как мне её удалить при необходимости? Можно ли это сделать скриптом?
PM MAIL   Вверх
Burrr
Дата 27.4.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



_lleopard_, можно строку удалить (совсем из DOM-дерева), а можно просто скрыть (не показывать):
<tr id="trId">...</tr>
Код
// Удаление
var tr = document.getElementById("trId");
tr.parentNode.removeChild(tr);
// Скрытие
var tr = document.getElementById("trId");
tr.style.display = "none";



--------------------
PM MAIL ICQ   Вверх
_lleopard_
Дата 27.4.2007, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 18.4.2007

Репутация: нет
Всего: нет



Появился ещё один вопрос, который я решить ни как не могу. Можно ли добавить строку после какой либо строки?? Если можно то как?
PM MAIL   Вверх
Burrr
Дата 27.4.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



Можно, для этого можно использовать метод insertBefore():
Код
<body>
<table border="1" id="tableId">
    <tr><td>erfewr</td></tr>
    <tr onclick="insertRow(this)"><td>Кликни и вставь до меня еще строку</td></tr>

    <tr><td>авп</td></tr>
</table>
<script type="text/javascript">
function insertRow(tr) {
    // Формируем новую строку
    var newTdCode = "Я новая сирока";
    var newTR = document.createElement("TR");
    var newTD = document.createElement("TD");
    newTD.innerHTML = newTdCode;
    newTR.appendChild(newTD);
    // Вставка
    tr.parentNode.insertBefore(newTR, tr);
}
</script>
</body>


А вообще вкуривай вот это:
http://wdh.suncloud.ru/dhtml03.htm#ref43


--------------------
PM MAIL ICQ   Вверх
_lleopard_
Дата 28.4.2007, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 18.4.2007

Репутация: нет
Всего: нет



А после какой либо строки можно добавить?

Добавлено через 2 минуты и 20 секунд
ненужно, сам нашёл!
PM MAIL   Вверх
BuShaRt
Дата 28.4.2007, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



А если так? 

Код

row = autotable.insertRow(x);
cell1 = row.insertCell(0);


где x - какой строкой вставлять учитывая нулевую, или что проще запомнить просто после какой строки вставлять без всяких учитывание нулей...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0953 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.