вопросы по JavaScript

Ivan826

есть n checkbox'ов в форме (n>2)
Необходимо что бы из формы отправлялись значения всех (если просто пустой чекбокс сабмитить, он не передаётся). Если юзер галку поставил, то значение yes, если нет, то что-нибудь другое.
Насколько я понял для этого по сабмиту необходимо чекать эти чекбоксы. Это не вопрос, но вот изменения value я что-то не пойму как сделать. Потому что если просто прописать жёстко value='yes', то после принудительного чеканья передадутся значения yes... А принудельно менять value у checkbox'ов со значение yes на no не получается. (с no на yes на раз)
Херня получается. Помогите плиз

mr82


...
<input type=hidded name=Var[First] value=no>
<input type=checkbox name=Var[First] value=yes>First

<input type=hidded name=Var[Second] value=no>
<input type=checkbox name=Var[Second] value=yes>Second
...

artimon

В чём сложность?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Test Checkbox</title>
<script type="text/javascript">
function s(form) {
if(!form.c1.checked) {
form.c1.value="off";
form.c1.checked = true;
}
if(!form.c3.checked) {
form.c3.value="off";
form.c3.checked = true;
}
}
</script>
</head>
<body>
<form name="xform" onSubmit="s(this)">
<input type="checkbox" name="c1" value="x"><br>
<input type="checkbox" name="c2" value="y"><br>
<input type="checkbox" name="c3"><br>
<input type="checkbox" name="c4"><br>
<input type="submit" value="send">
</form>
</body>
</html>

PS. Писать цикл с перебором всех checkbox'ов было лень.

skvoria

Хмммм....
Вопрос из разряда тех, что обычно имеют другое решение.
Такие вещи проще разгребать на сервере.
Но если в падлу, или не имеешь доступа...
<script>
function check_it{
var cb = document.forms.mod.c1;
if( cb.checked ) {
document.forms.mod.c1.value="yes";
} else {
document.forms.mod.c1.checked=true;
document.forms.mod.c1.value="no";
}
}
</script>
<form name="mod" action="http://www.rusmarket.ru" method="get">
<input type="checkbox" name="c1" value="">
<input type="submit" onclick="check_it">
</form>

dedwowan

Проще и правильнее изменить логику скрипта, который обрабатывает запрос, а не ковырять клиента подгоняя под серверный скрипт

ivanto2

Ничаво ни панемаю

Ivan826

Просто в силу некоторых особенностей обрабатывающего скрипта (там и так уже пи%%ц как сложно)
необходмо трахаться на клиенте.... А я в JavaScript'e не силён
Всем спасибо.

foxie84

Обходим непередающиеся значения по умолчанию.

<script>
function checkForm(el)
{
document.all[el+'_'].value = document.all[el].checked?"yes":"no";
}
</script>

<form name="f1">
<input type="hidden" name="c1_" value="no">
<input type="checkbox" id="c1" name="c1" value="no" onClick="checkForm('c1')">

<br>
<input type="hidden" name="c2_" value="no">
<input type="checkbox" id="c2" name="c2" value="no" onClick="checkForm('c2')">

<br>
<input type="submit">
</form>

artimon

1. document.all есть только в IE.
2. Зачем вешать скрип на каждый элемент, когда это можно сдеалть один раз, перед отправкой.
2 А если у клиента не работает JS, то что делать будешь?

Ivan826

пиздец значит.
у меня вообще ограничения по браузеру тоько IE начиная с 6.0 и js включённый требуется
типа админская часть

Ivan826

Рас уж поднялся вопрос, а как в мозилле определить id элемента, по которому кликнули
window.event.srcElement.id не работат

foxie84

1. document.all[...] -> document.forms.f1[...]
2. А мне функция в одну строчку больше нравится.

skvoria

Рас уж поднялся вопрос, а как в мозилле определить id элемента, по которому кликнули
window.event.srcElement.id не работат
Опять же, есть решение проще: к примеру onclick="myFunc(this)" и не париться кто как отрабатывает id. В myFunc ловишь уже готовую ссылку на объект.

Ivan826

Ну и на последок совсем глупый вопрос: как ВСЕМ элементам типа checkbox в форме поставить checked? Типа у них есть id. Просто не в курсе как работать с коллекцией elements

artimon

Пройтись по ней for'ом и задать у элементов типа checkbox значение checked = true.

skvoria

насколько я понимаю, в твоем случае у чекбоксов один и тот же name, тогда можно без коллекции:
for( var i = 0; i < document.myFormName.myCheckBoxName.length; i++ ) {
document.myFormName.myCheckBoxName.checked = true;
}

Ivan826

проблема в том что не только у чекбоксов один и тот же name......

Ivan826

Обьясни плиз ламеру как это сделать, а лучше напиши

skvoria

Не понял прикола, что значит - не только у чекбоксов?
Текст формы кинь?

Ivan826

Ну вот так вот

<form onsubmit="func;" action="change.php" method="post" style="display: inline">
<table border="0" class="text" cellpadding="1" cellspacing="0" style="font-size: 11px;margin: 0px; padding:0px;">
<tr>
<td colspan="1" style="padding-left: 5px;">
<input type="text" class="inp3" title="Имя тренера" name="name[]" maxlength="30" value="y">
<input type="hidden" name="id[]" value="6">
<input type="hidden" name="what[]" value="name">
</td>
<td colspan="1" style="padding-left: 5px;">
<input type="text" class="inp3" title="Почтовый ящик" name="name[]" maxlength="30" value="e">
<input type="hidden" name="id[]" value="6">
<input type="hidden" name="what[]" value="mail">
</td>
<td class="text">
<input type="checkbox" name="name[]" id="1" onclick="change;" value="yes" checked />Показывать тренера
<input type="hidden" name="id[]" value="6">
<input type="hidden" name="what[]" value="view">
</td>
</tr>
<tr>
<td colspan="1" style="padding-left: 5px;">
<input type="text" class="inp3" title="Имя тренера" name="name[]" maxlength="30" value="tgор">
<input type="hidden" name="id[]" value="13">
<input type="hidden" name="what[]" value="name">
</td>
<td colspan="1" style="padding-left: 5px;">
<input type="text" class="inp3" title="Почтовый ящик" name="name[]" maxlength="30" value="b">
<input type="hidden" name="id[]" value="13">
<input type="hidden" name="what[]" value="mail">
</td>
<td class="text">
<input type="checkbox" name="name[]" id="2" onclick="change;" value="off" />Показывать тренера
<input type="hidden" name="id[]" value="13">
<input type="hidden" name="what[]" value="view">
</td>
</tr>
<tr>
<td colspan="1" style="padding-left: 5px;">
<input type="text" class="inp3" title="Имя тренера" name="name[]" maxlength="30" value="Новый тренер">
<input type="hidden" name="id[]" value="17">
<input type="hidden" name="what[]" value="name">
</td>
<td colspan="1" style="padding-left: 5px;">
<input type="text" class="inp3" title="Почтовый ящик" name="name[]" maxlength="30" value="блор">
<input type="hidden" name="id[]" value="17">
<input type="hidden" name="what[]" value="mail">
</td>
<td class="text">
<input type="checkbox" name="name[]" id="3" onclick="change;" value="yes" checked />Показывать тренера
<input type="hidden" name="id[]" value="17">
<input type="hidden" name="what[]" value="view">
</td>
</tr>
</table>
<input type="hidden" name="table" value="coaches">
<input type="hidden" name="query" value="edit=coaches"><br />
<input type="submit" class="submit" value="Изменить">
</form>
У всех элементов имя name[]
Зачем - не спрашивай. Долгая история.
Вот так вот я ипусь....

skvoria

Мой разум отказывается в это верить.
Йобни по серверной части и ниибись.
Ржач поднимется, когда придет клиент с отключенным ЖС...

Ivan826

Вся жопа в том что мне намного легче сделать так, чем менять ядро сайта, под которое и вымучивалась скрипт, который умеет эту хуйню понимать. Зато быстро. Очень.
Слушай, а не знаешь, возмож но ли определить есть у юзера JS и если нет выкинуть его нахуй?

artimon

Если ты пишешь админский интерфейс, то просто напиши, что требуется IE6 с включённым javascript'ом.

Ivan826

Это понятно
Уже давно сделал
Но механизм проверки на жаваскрипт можно сделать?

sergei1969

например можно сделать начальную страничку, с который будет переход дальше через JS. т.е. без него дальше просто не попадёшь. и на ней написать "вруби JS сцука, а то шиш тебе"
или ставить тем же JS какую-нить куку и проверять её наличие

sergei1969

короче сделать что-нить, что бы показывало наличие JS, в противном случае считаем, что его нет

Ivan826

Тема! Спасибо!

skvoria

Фтыкай тег <noscript>
Оставить комментарий
Имя или ник:
Комментарий: