Ayola.net
Новости: В связи с обилием спама, постинг на форуме временно закрыт.

Для связи с поддержкой используйте тикеты в панели управления.
 
*
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь. Июнь 28, 2017, 13:58:26


Войти


Страниц: [1]
  Печать  
Автор Тема: Проблема с JavaScript  (Прочитано 4640 раз)
0 Пользователей и 1 Гость смотрят эту тему.
popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« : Январь 04, 2008, 04:31:39 »

Вот у меня тут есть код:

<?php
//здесь осуществляется проверка на предмет предоставлять доступ или выйти
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Система LiveMarks->Редактирование оценок</title>
<script language="JavaScript" type="text/javascript">
function clear() {
  for(var i=0; i<1581; i++) {
   if (i%51!=0) {document.blank.elements*.value = ''}
  }
}
</script>

<style type="text/css">
<!--
.style1 {font-family: Verdana, Arial, Helvetica, sans-serif}
-->
</style>
</head>
<body>
<span class="style1">
<?php
//здесь находится длинный запутанный PHP-код Улыбающийся
echo '<br><input type="submit" name="save" value="Сохранить"> <input type="button" name="clear" value="Очистить" onclick="clear()"></form>';
?>
</span>
</body>
</html>

А вот результат работы этого дела:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Система LiveMarks->Редактирование оценок</title>
<script language="JavaScript" type="text/javascript">
function clear() {
  for(var i=0; i<1581; i++) {
   if (i%51!=0) {document.blank.elements*.value = ''}
  }
}
</script>
<style type="text/css">
<!--
.style1 {font-family: Verdana, Arial, Helvetica, sans-serif}
-->
</style>
</head>
<body>
<span class="style1">
<form name="blank" method="POST" action="update.php">

здесь находится огромная таблица

<input type="submit" name="save" value="Сохранить"> <input type="button" name="clear" value="Очистить" onclick="clear()"></form></span>

здесь код рекламного блока айолы

</body>
</html>

Проблема в том, что у меня не очищались все поля при создании стандартной кнопки сброса для формы. И я сделал специальную функцию clear(), чтобы она очищала ВСЕ поля, а не только затронутые в текущем сеансе. Дело в том, что функция не только не работает - браузер при этом выдаёт странную ошибку:
строка 21
символ 1
код ошибки 0
причина: объект не поддерживает это свойство или метод

Строку 21 я выделил красным цветом. Символ 1 - это символ < тэга form.
Я вообще не понимаю, чего он хочет. В смысле, что здесь не так.
P.S. Мне пришлось опустить в двух местах после слова elements конструкцию "квадратная скобка i квадратная скобка", поскольку форум воспринимает это как курсив. Там стоят звёздочки (*).
« Последнее редактирование: Январь 04, 2008, 04:38:45 от popov654 » Записан
tzps@ayola.ru
Модератор
Маэстро
*****

Карма: 79
Сообщений: 1695



Просмотр профиля WWW
« Ответ #1 : Январь 04, 2008, 07:53:11 »

я не большой спец в яваскрипте, но 2 вещи меня смущают:
1. Разве все элементы имеют свойство value?
2. Document.blank.elements* - а это точно правильно?
Записан

Astraller™
Маэстро
*****

Карма: 151
Сообщений: 1389

Вселенское зло


Просмотр профиля WWW
« Ответ #2 : Январь 04, 2008, 11:20:28 »

Решение не совсем верное, если не сказать больше - такая модель документа сильно устарела и вероятнее всего будет работать не под всеми браузерами.
Вернее будет так:
Код:
function clear_form(){
  form=document.getElementById('blank_form');//Получаем ссылку на форму.
  form_child=form.childNodes;                        //Получаем элементы лежащие внутри формы
  for (n=0;form_child[n];n++){                      //Перебираем элементы лежащие внутри формы
    if(form_child[n].nodeName=="input"){         //Если текущий элемент - input
      form_child[n].value="";                          //Очищаем его
    }
  }
}
Далее соответственно надо изменить:
<form name="blank" id='blank_form' method="POST" action="update.php">
И:
<input type="button" name="clear" value="Очистить" onclick="clear_form()">

Хотя это решение в корне не верно. А проблема в том что элемент reset очищает поля при двух услорвиях:
1) Элементы находятся в одной с ним форме.
2) Он не очищает а восстанавливает то значение какое было изначально, до изменений внесенных пользователем.

PS Писал на коленке, за ошибки особо не пинать Улыбающийся
PPS Сори - сначала не внимательно прочитал пост. Улыбающийся
« Последнее редактирование: Январь 04, 2008, 13:58:06 от Astraller™ » Записан

Гамлета здесь больше нет. Осталась только тень.
popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« Ответ #3 : Январь 05, 2008, 19:17:26 »

Document.blank.elements* - а это точно правильно?
Так я же говорю, это имелось в виду [_i_], только без _ Улыбающийся
Записан
popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« Ответ #4 : Январь 05, 2008, 19:23:58 »

А почему тогда в довольно новом пособии предлагалось писать именно так? Там ещё говорилось, что можно сделать примерно так:
onclick="clear(this.form)"

function clear(form) {
for(var a=0; a<1581;a++) {
form.elements[a]='';}
}
Но так тоже не работает!
P.S. У меня кнопка сброса находится как раз в той форме, которую надо очистить. А форму мне надо именно очистить, а не отменить изменения. Из-за чего и весь сыр-бор. Улыбающийся
Записан
popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« Ответ #5 : Январь 05, 2008, 19:29:37 »

Так всё вроде понял, кроме этого childNodes. Что это такое? В смысле, можно где-нибудь в онлайне об этом почитать? А то хочется всё таки понять, как это используется и с чем его едят, а не просто скопировать.
P.S. За код спасибо ))
Записан
Astraller™
Маэстро
*****

Карма: 151
Сообщений: 1389

Вселенское зло


Просмотр профиля WWW
« Ответ #6 : Январь 05, 2008, 22:25:42 »

Так всё вроде понял, кроме этого childNodes. Что это такое?
http://xhtml.ru/2007/07/05/dom-methods-cheatsheet/
Цитировать
P.S. За код спасибо ))
Он даже заработал?
Записан

Гамлета здесь больше нет. Осталась только тень.
popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« Ответ #7 : Январь 05, 2008, 22:57:48 »

Да я ещё не проверял. А что, он не должен работать?
Записан
popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« Ответ #8 : Январь 06, 2008, 00:15:18 »

Всё, понял...установил старую версию Mozilla, завалявшуюся где-то далеко...а там есть DOM Inspector. Так вот, дело было в том, что у меня все эти поля ввода были в ячейках огромной таблицы, и если прослеживать прямой путь по дереву до каждого из них то будет примерно вот что:
коллекция форм>форма>таблица>тело таблицы>ряд>ячейка>поле ввода>defaultValue
а value как ни странно пустое...значит надо юзать getElementById...проще будет  Смеющийся
Записан
Astraller™
Маэстро
*****

Карма: 151
Сообщений: 1389

Вселенское зло


Просмотр профиля WWW
« Ответ #9 : Январь 06, 2008, 00:37:41 »

Всё, понял...установил старую версию Mozilla, завалявшуюся где-то далеко...а там есть DOM Inspector.
Проф совет - используй FireFox с плагином FireBug - очень полезная штуковина. И вообще - будут вопросы - стучи в асю, я всегда рад помочь человеку который ХОЧЕТ чему-то научиться Подмигивающий
Записан

Гамлета здесь больше нет. Осталась только тень.
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.13 | SMF © 2006, Simple Machines LLC

2003-2008 © ООО "Инфотур" - Бесплатный хостинг Ayola.net
Valid XHTML 1.0! Valid CSS! Dilber MC Theme by HarzeM
Страница сгенерирована за 0.084 секунд. Запросов: 17.