Dom: поолное уничтожение детей узла

Обсуждение вопросов клиентского программирования.

Модератор: Duncon

Ответить
RomanMZ
Сообщения: 5
Зарегистрирован: 24 апр 2007, 22:43

Здравствуйте.
Есть инпут в ячейке таблицы, которая в свою очередь, принадлежит форме:

Код: Выделить всё

<form>
<table>
<tbody id="tbody">
<tr id = "row">
<td><input type="text" name="aaa" value="000"></td>
</tr>
</tbody>
</table>
</form>
Послде того как я удалаю строку таблицы с id = "row"
forms[0]["aaa"] остаётся в памяти. Это видно из того что
выполняется алерт в таком коде:

Код: Выделить всё

if (document.forms[0]["aaa"]){
  alert('Present');
}
Как мне уборать из памяти совсем это злосчастный инпут?
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

RomanMZ, а как ты удаляешь строку?

[HTML]<script>
var first = true;
function test(button) {
if (first) {
var row = document.getElementById("row");
row.parentNode.removeChild(row);
first = false;
} else {
button.value = document.forms[0]["aaa"];
if (document.forms[0]["aaa"]){
alert('Present');
}
}
}
</script>
<form>
<table>
<tbody id="tbody">
<tr id = "row">
<td><input type="text" name="aaa" value="000"></td>
</tr>
</tbody>
</table>
</form>

<input type="button" onclick="test(this)" value="test"/>[/HTML]

первое нажатие на "test" удаляет строку, второе - проверяет наличие input: присваивает кнопке test найденный обьект и если обьект существует - выдаёт alert

так вот: FF 1.5 присваивает test = undefined и alert_а не возникает
RomanMZ
Сообщения: 5
Зарегистрирован: 24 апр 2007, 22:43

спасибо.
Я только что другое придумал: Я перед удалением строки таблицы присваиваю

Код: Выделить всё

document.forms[0]["aaa"] = 0;
Именно 0 а не NULL
И тогда всё ОК. Правда это я проверял лишь в фаерфоксе, насчёт других браузеров не скажу.
Аватара пользователя
__Yuri__
Сообщения: 140
Зарегистрирован: 02 ноя 2006, 17:17
Контактная информация:

RomanMZ писал(а):спасибо.
Я только что другое придумал: Я перед удалением строки таблицы присваиваю

Код: Выделить всё

document.forms[0]["aaa"] = 0;
Именно 0 а не NULL
И тогда всё ОК. Правда это я проверял лишь в фаерфоксе, насчёт других браузеров не скажу.
Ай, молодец, вот это - экстремальное программирование.
А почему "Именно 0" - может лучше "-1"?
А вот так не пробовал:
document = "ПРЕВЕД МЕДВЕД!";
тогда, наверное совсем все ОК будет.
RomanMZ
Сообщения: 5
Зарегистрирован: 24 апр 2007, 22:43

Дело в том, что стандартный метод (например, предложеный Оскаром) работает только в фаерфоксе. А мне и в експлорере надо.
Аватара пользователя
__Yuri__
Сообщения: 140
Зарегистрирован: 02 ноя 2006, 17:17
Контактная информация:

Дело в том, что в JavaScript переменные меняют тип при присваивании им значений другого типа, поэтому можно делать так:
var i="привет"; // щас тип i - string
i=1; // щас тип i - int


Язык JavaScript содержит шесть типов данных: Undefined (неопределенный), Null (нулевой), Boolean (логический), String (строковый), Number (числовый) и Object (объектный).


NULL - это обозначение несуществующего объекта, 0 - это int и никакого автоматического преобразования между ними не происходит.

После уничтожения объекта штатными средствами: removeChild, document.forms[0]["aaa"] должен получить значение Undefined, что легко проверить.

Если же, согласно документации, присвоить объекту значение типа Number, то создастся новый числовой объект с данным значением по умолчанию, т.е. объект Number со значением 0...

По-моему, так.
Ответить