Кэширует ли JavaScript элементы DOM? - PullRequest
2 голосов
/ 13 февраля 2009

Я использую mootools для переключения отображения (и существования) двух элементов DOM в одной из моих форм. Затем я использую javascript для проверки формы, чтобы убедиться, что все обязательные поля были заполнены. Проблема в том, что браузер, кажется, кэширует элементы. Например, у меня есть HTML, как это:

<input name="inputbox" id="inputbox" type="text" />
<select name="selection" id="selection">...</select>

И JavaScript для проверки выглядит примерно так:

if (form.inputbox != null && form.inputbox.value == "") {
  //don't submit form
{
else if (form.selection != null && form.selection.value == 0) {
  //don't submit form
}

Теперь это работает нормально, когда страница загружается впервые и элемент input удален. Однако, когда я нажимаю кнопку, которая заменяет элемент input элементом select, с этого момента form.inputbox и form.selection в коде javascript содержат соответствующий элемент, каким он был в своем последнем состоянии в DOM - даже если его больше нет в DOM. Таким образом, javascript кеширует DOM и не обновляет элементы, когда они удаляются из DOM? Что здесь происходит, и, что более важно, как мне исправить это?

Редактировать: я использую mootools для удаления и замены элементов, документацию для соответствующих функций можно найти здесь и здесь .

Ответы [ 2 ]

3 голосов
/ 13 февраля 2009

Оценка элемента по имени (form.elementName), когда несуществующий возвращает undefined. Оценка значения свойства объекта ($ ('elementId')) возвращает ноль. Undefined и null обрабатываются по-разному.

1 голос
/ 13 февраля 2009

Хорошо, теперь я могу ответить на вторую часть моего вопроса: как это исправить. Если вы используете mootools, тогда используйте функцию доллара (или getElementById может работать) вместо использования form.selection и form.inputbox:

if ($("inputbox") != null && $("inputbox").value == "") {
  //don't submit form
{
else if ($("selection") != null && $("selection").value == 0) {
  //don't submit form
}

Это работает, но у меня нет объяснения, почему другой не ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...