Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Изменение значения html-элемента hidden


Автор: Avtor 27.11.2007, 19:38
Для наглядности привожу простенький код:
Код

<HTML>
  <HEAD>
    <META http-equiv=content-type content=text/html;charset=windows-1251>
<script language="javascript">
function myFunc() {
  alert(document.getElementById("hidden_id1").value);
}
</script>    
  </HEAD>
  <BODY onload="myFunc()">
    <form method="post">
      <table align="center" border="1">
        <tr>
          <td>
            <INPUT type="button" value="+" id="button_id1" onclick="document.getElementById('hidden_id1').value = '5';" />
            <INPUT type="hidden" name="sel1" id="hidden_id1" value="1" />          
          </td>
        </tr>
      </table>
    </form>
  </BODY>
</HTML>

Так вот при первой загрузке сообщение выдаст "1". Если нажать кнопку, а затем сколько угодно раз обновлять, то сообщение каждый раз будет выдавать "5". Правда это происходит только в FF и IE, в Oper'е же все нормально работает - после каждой перезагрузки выдает "1". Объясните такой абсурд с FF и IE пожалуйста.

Автор: solenko 27.11.2007, 20:09
Не знаю как IE, но FF точно после перезагрузки восстанавливает значения формы, которые до этого ввел пользователь

Автор: Avtor 27.11.2007, 20:34
Я тоже так думал пока, код не проверил.

Автор: Mymik 27.11.2007, 21:34
Avtor, на самом деле все гораздо проще. Ошибка происходит из-за того что ты нажимаешь Ctrl+R или F5(если просто нажать еще раз на ссылку, как бы открыть окно по новой, не обновить, то все будет нормально). Даже не знаю как объяснить это. Но вобщем-то все данные что ты изменил сохраняются свой статус.
Потому надо либо в onload обнулять значения либо... либо не знаю даже... Не нажимать Ctrl+R или F5.

Автор: Avtor 27.11.2007, 21:59
Согласен абсолютно со всем и происходит это по той причине, что "5" подставляется сразу в код (выяснено в DOM инспекторе), который обновляй не обновляй - "5" в нем прописана уже жестко. Однако относится это судя по всему только к типу hidden (если поставить другой тип, например, button, то все функционирует так, как и должно).

Автор: ksnk 28.11.2007, 01:44
Цитата(Avtor @  27.11.2007,  19:38 Найти цитируемый пост)
Объясните такой абсурд с FF и IE пожалуйста
 Абсурд, которому следует не только IE, но и FF - это гарантированная фича, а совсем не абсурд smile
Называется оно - autocomplete. Соответственно, если написать
Код

<INPUT type="hidden" autocomplete="off" name="sel1" id="hidden_id1" value="1" />
, то единичка будет на своем месте как пришитая...

Автор: Avtor 28.11.2007, 21:40
Если код немного переделать так:
Код

<HTML>
  <HEAD>
    <META http-equiv=content-type content=text/html;charset=windows-1251>
<script language="javascript">
function myFunc() {
  alert(document.getElementById("hidden_id1").value);
}
</script>    
  </HEAD>
  <BODY onload="myFunc()">
    <form method="post">
      <table align="center" border="1">
        <tr>
          <td>
            <INPUT type="button" value="+" id="button_id1" onclick="document.getElementById('hidden_id1').defaultValue = '5';" />
            <INPUT type="hidden" name="sel1" id="hidden_id1" value="1" />          
          </td>
        </tr>
      </table>
    </form>
  </BODY>
</HTML>

То он будет работать уже и в FF, но только не в IE. Кстати фишка с autocomplete="off" дает такой же результат: в IE не работает, т. е. при обновлении все так же выдает "5".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)