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


Автор: *eug* 1.2.2004, 17:46
Как проверить выбран ли хотя бы один checkbox в форме и соответсвенно отпралять её затем или нет?

Автор: Sardar 2.2.2004, 00:13
Пробегаемся по форме, проверяем свойство checked:
Код

<script language="Javascript" type="text/javascript">
<!--
function check(obj) {
for( i=0; i<obj.elements.length; i++)
 if(obj.elements[i].type=="checkbox"&&obj.elements[i].checked) return true;
return false;
}
//-->
</script>
</head>
...
<form onSubmit="return check(this)">
<input type="checkbox">
<input type="checkbox"><br>
<input type="submit" value="Send">
</form>

Автор: *eug* 2.2.2004, 23:31
Спасибочки!

Автор: Иль 6.3.2005, 15:06
Я тут влез, а зря - стираю

Автор: Aliance 6.3.2005, 16:07
Иль, Sardar ошибки не сделал =)
Сокращеный синтаксис допускает данное опускание smile
Вообще скобки нужны для того, чтобы не только первая строчка, но и посл. входили в операторы, а раз тут 1 - то они лишние smile


Добавлено @ 16:09

Полезно: http://forum.vingrad.ru/index.php?showtopic=36336

Автор: Иль 14.3.2005, 02:26
Да, зря лез, наверно ошибся, раз у меня не работало тогда. Подчистил здесь и спасибо за объяснение.
36336 читал smile , спасибо, не помогло smile(шутка юмора).

Не подскажите, (в поиске не найду). Как отсылать только непустые поля и отмеченные чекбатоны. Или, хотябы, не отсылать пыстые чекбатоны. Т.е. как-то блокировать отсыл пустых полей. Уж очень эта функция на подобные мысли наводит.

Автор: batigoal 14.3.2005, 12:50
не знаю, как это делается по-человечески smile , но у меня, например, перед отправкой некоторые элементы делаются disabled. Тогда они не включаются в отсылаемый запрос.

Автор: Sardar 14.3.2005, 18:55
Иль это задача браузера smile Не отселектированные ческбоксы он не отсылает. Тоже самое для всех других элементов форм.

Если это не так, то открой новый топик и запости код, который так странно воздесйтвует на браузер smile

Автор: Иль 15.3.2005, 10:11
Да, странно smile , не задумался. С чекбатонами я ошибся (все путем) smile , а вот пустуе поля text отсылаются.

Посмотрите тогда, пожалуйста, топик в разделе JS для начинающих, назову "Запрет отправки полей", только создам вечером или завтра - сейчас не успею.

Lamer George спасибо, возникла идея проверить поля функцией предложенной Sardar и сделать дисаблю smile . Здорово будет, заодно, отсечь с ненужным значением (напр. по умолчанию).

Автор: batigoal 15.3.2005, 11:09
Цитата
Здорово будет, заодно, отсечь с ненужным значением

У меня, собственно, так и есть.

Автор: Иль 15.3.2005, 20:59
Цитата
Тоже самое для всех других элементов форм
Моя беда, что отсылаются имена. Неотмеченные чекбоксы ведут себя, при отправке форм, как будто их не существует на странице, а вот пустые поля "text" передадут имя обязательно и браузер их не отселектирует (Имя1=&Имя2=&Имя3=...). Хотелось привить при помощи JS полям "text" такое поведение чекбоксов. Все, пошел писать новый топик. Приходите...

Автор: Sardar 16.3.2005, 01:04
Вот простейший фильтр:
Код
<script language="Javascript" type="text/javascript">
<!--
function filter(frm) {
  for(var i=0; i<frm.elements.length; i++) {
    if(/^\s*$/.test(frm.elements[i].value)||frm.elements[i].value==frm.elements[i].getAttribute("defvalue")) frm.elements[i].disabled=true;
  }
}
//-->
</script>

<form method="get" onsubmit="filter(this);" action".">
 <input type="text" name="nm1" value="bla1" defvalue="bla1">
 <input type="text" name="nm2" value="bla2" defvalue="bla2">
 <input type="text" name="nm3" value="bla3" defvalue="bla3"><br>
 <input type="submit" value="Send">
</form>


Удаляем все элементы значение которых пустое либо равно дефолтовому, которе заданно аттрибутом defvalue.

Автор: Иль 17.3.2005, 10:44
Дорогие братья ламеры (в JS), залез сюда и правлю ради вас:
Со свойством defvalue не работает и defValue тоже, а работает:
defaultValue - возвращает содержимое элемента по умолчанию (которое мы изначально задали в HTML к прм)
Не забываем, также, что жизнь удивительна и в ней есть место скрытым полям, которые тоже погибнут из-за defaultValue, поэтому всетаки пользуем
Код
if(/^\s*$/.test(frm.elements[i].value)||frm.elements[i].value=="не нужное для отправки значение") frm.elements[i].disabled=true; ...

А еще лучше оставляем все по старому, читаем немножко про JS и добавляем условие, чтоб не трогались скрытые поля.
===========================================================================================
Спасибо Sardar, правда были ошибки с фокусом при валидации. У меня сначала
Код
function isNeEmptyFocus(elem){var str=elem.value;var re=/.+/;
if(!str.match(re)){setTimeout("focusElement('"+elem.form.name+"', '"+ elem.name+"')",0);return false;}else{return true;}}

function focusElement(formName,elemName){var elem=document.forms[formName].elements[elemName];elem.focus();elem.select();}
потом уже
Код
function filter(frm)
Я конечно заменил на без фокуса
Код
function isNeEmpty(elem){var str=elem.value;var re=/.+/;if(!str.match(re)){return false;}else{return true;}}
Но! извините интересно smile , возможно в теле filter(frm) или до/после ee вызова "снять" фокус (smile). Или лучше будет перевести его на элемент, который всегда будет не disabled? У меня, получается, это только кнопка submit. Можно конечно перекидывать от случая к случаю на выжившие поля.

Автор: Sardar 17.3.2005, 20:33
Иль не пиши код в одну строчку, читается с неохотой...

Не понял задачи, фильтр срабатывает в момент отправки формы, а где там фокус стоит уже не важно. С моим коннектом форма отправляется за секунду smile

Автор: Иль 19.3.2005, 10:44
Лады, не буду больше экономить пространство и подправлю код.

А насчет фокуса скажу следующее: Если пользоваться только isNeEmptyFocus у меня обязательно ругается насчет того, что мол: "Чего ты парень, ставишь фокус на объект, который впал в полную дисаблю или не поддерживает установку на себя фокуса, а может, даже, его вообще не существует, но точно сказать не могу" - так он мне и сказал, этот ковбой IE из США, но морда у него была какая-то не американская smile и говорил по русски smile .

Я конечно в полном трансе, ведь у меня установка фокуса идет до предложенной тобой фильтрации. Может виноват setTimeout, но Aliance сказал, что без него IE глючит.
А вообще, проблема решена, можно и забыть. Просто интересно. Всего наилучшего.

Автор: Aliance 19.3.2005, 15:24
Цитата
Может виноват setTimeout, но Aliance сказал, что без него IE глючит.

Без нее не будет работать, т.к. IE спешит и пытается выполнить работу с объектом до его создания... Тоже самое и с динамическими окнами...

Автор: Иль 19.3.2005, 16:18
Вообще физически мышью на disabled-поле фокус никак не поставишь, видать только JS умеет (не удаляя disabled). Может прислушаться к тому, что сказал/написал IE, а из его песни слов не выкинешь. Скрипт у меня простенький, вероятность ошибки равна... Ну ладно, не будем про это smile.
Кстати, трабла возникала только когда перед фильтрацией не стоял alert(), те когда заменю все alert() перед фильтрацией на невидимые слои может придется использовать функцию без фокуса.

Меня сейчас как-то больше куки интересуют.

Автор: Sardar 19.3.2005, 16:27
Иль создай новый топик, выложи код, а то никак не пойму что требуется и где камни подводные smile

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