Вход

Просмотр полной версии : Скрипт подсчёта чек боксов по имени а не по id


klubnichkaaa
02.02.2011, 15:02
Вот скрипт который считает чекбоксы

<script type="text/javascript">
function price(form){
var total = 0;
for (var i = 1; i< form.elements.length; i++){
if (document.getElementById(i).checked) {
var b=parseFloat(document.getElementById(i).value);
}
else {
b=0;
}
total+=b;
}
document.getElementById("total_price").innerHTML=total;
document.getElementById("total_prie").value=total;
document.getElementById("total_pr").value=total;
}
</script>

Имя поля у меня xz_
как мне сделать что бы он обращался по имени!? а имя я уже потом поставлю на увеличение.

ksa
02.02.2011, 15:16
как мне сделать что бы он обращался по имени!?
Оно?

document.getElementsByName('нужное_имя')

softovik88
02.02.2011, 16:13
та можешь им оставить и id и name - переписывать не придется.

klubnichkaaa
02.02.2011, 16:19
Слушай прогресс есть хотя бы потому что хоть нолик стал появляться, но он не считает подскажи может я не правильно переписал скрипт!?
вот поля которые он считает
<?php $menuMail='<input type="checkbox" name="xz_'.$raz_na->id.'" id="'.$b.'" value="'.$raz_na->cena.'">'; $b++; echo $menuMail;?>

xz_ оно не меняется оно всегда такое! я так понял что в for нужны другие условия какие подскажи пожалуйста!


<script type="text/javascript">
function price(form){
var total = 0;
for (var i = 1; i< form.elements.length; i++){
if (document.getElementsByName('xz_').checked) {
var b=parseFloat(document.getElementsByName('xz_').val ue);
}
else {
b=0;
}
total+=b;
}
document.getElementById("total_price").innerHTML=total;
document.getElementById("total_prie").value=total;
document.getElementById("total_pr").value=total;
}
</script>

klubnichkaaa
02.02.2011, 16:20
не могу я id поставить! скрипт полностью рабочий дело в том что если добавить ещё поля любые то скрипт перестаёт работать!

softovik88
02.02.2011, 16:37
document.getElementsByName('xz_').checked
так а ты же имя поля не подставляешь - циферку - ту, что в цикле

ksa
02.02.2011, 16:38
может я не правильно переписал скрипт
Дело в том, что

document.getElementsByName('нужное_имя')

возвращает целую коллекцию элементов с таким именем. Т.о. нельзя кним обращаться

document.getElementsByName('xz_').checked
или
document.getElementsByName('xz_').value

Нужно писать

document.getElementsByName('xz_')[<порядковый_номер_элемента>].checked
или
document.getElementsByName('xz_')[<порядковый_номер_элемента>].value

klubnichkaaa
03.02.2011, 08:54
Я понял щас проверю! Могу я так сделать?

<script type="text/javascript">
function price(form){
for (var i = 1; i< form.elements.length; i++){
if (document.getElementsByName('xz_')[i].checked) {
var b=parseFloat(document.getElementsByName('xz_')[i].value);
}
else {
b=0;
}
total+=b;
}
document.getElementById("total_price").innerHTML=total;
document.getElementById("total_prie").value=total;
document.getElementById("total_pr").value=total;
}
</script>

или же мне нужно id из базы сюда подставить!?
name="xz_'.$raz_na->id.'"
если эту то как я её в java script поставлю!?

klubnichkaaa
03.02.2011, 09:00
и вот ещё что хотел спросить что тогда конкретно в for прописать! в условие ()

ksa
03.02.2011, 09:06
Могу я так сделать?
Без примера хтмл разметки скрипт никак не оценить... Откуда мне знать чего там у тебя и как.
Делай полный тестовый пример - нанём и будем "тренироваться".

klubnichkaaa
03.02.2011, 10:18
Вот код надеюсь разберётесь там всё расписано.
Нужно посчитать чек боксы, но так как там есть такие поля для заполнения почты имени текста, скрипт не работает, вот и нужно как я предпологаю чисто по имени обратиться.

ksa
03.02.2011, 10:23
Вот код надеюсь разберётесь там всё расписано
Зачем мне какой-то пхпшный код? И нестоит думать что кому-то нужно в чем-то вашем разбираться :) Если это ненужно тебе - другому точно ненужно.

Делай простенький, полностью хтмлный пример, без всяких там пхпшных вставок.

klubnichkaaa
03.02.2011, 10:52
хорошо, я с тобой полностью согласен!!!

klubnichkaaa
03.02.2011, 11:52
Вот чисто пример маленький простой. Нужно обратиться по имени. а не по id
Щас буду тоже пробовать. И кстати там есть форма вот нужно что бы она там и осталась и независимо от колличества полей всё считалось.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251 /">
<title>Привет</title>
</head>
<body>
<script type="text/javascript">
function price(form){
var total = 0;
for (var i = 1; i< form.elements.length; i++){
if (document.getElementById(i).checked) {
var b=parseFloat(document.getElementById(i).value);
}
else {
b=0;
}
total+=b;
}
document.getElementById("total_price").innerHTML=total;
document.getElementById("total_prie").value=total;
document.getElementById("total_pr").value=total;
}
</script>

<form name="form" action="#" onclick="price(this)" method="post">
<input type="hidden" name="tot_pr" value="" id="total_pr" />
<table class="tablica">

<?php
$names[]='<input type="checkbox" name="xz_1" value="100" id="1">';
$names[]='<input type="checkbox" name="xz_2" value="100" id="2">';
$names[]='<input type="checkbox" name="xz_3" value="100" id="3">';
foreach ($names as $value) {
echo $value."<br>";}
?>
<table align="left">
<tr>
<td id='total_price' style='color: #993300;font-weight:bold; font-size:14px'></td>
</tr>
</table>

<table align="center">
<tr>
<td>
<br><br>
<p class="mail-zakaz"><p>
Имя:<br />
<input type="text" name="name" size="40" ><br />
E-mail:<br />
<input type="text" name="pojta" size="40" ><br />
Тел:<br />
<input type="text" name="tel" size="40" ><br />
Сообщение:<br />
<textarea name="mess" rows="10" cols="40" ></textarea>
<br />
<input id="total_prie" type='hidden' name="hi" value="">
<input type="submit" value="Отправить" name="submit">
</td>
</tr>
</table>

</form>

</body>
</html>

ksa
03.02.2011, 14:50
Нужно обратиться по имени. а не по id
Если я правильно понял у тебя и наме-то все уникальные... :)
Тогда так

<input type="checkbox" name="xz_1" value="100" id="1">

<script>
alert(document.getElementsByName('xz_1')[0].checked)
</script>

ksa
03.02.2011, 14:58
klubnichkaaa, дай всем чекбоксам одно имя - можешь работь в цикле...

<input type="checkbox" name="xz" value="100" id="1">;
<input type="checkbox" name="xz" value="100" id="2" checked>;
<input type="checkbox" name="xz" value="100" id="3">;

<script>
var i,n=0
for (i=0; i<document.getElementsByName('xz').length; i++) {
if (document.getElementsByName('xz')[i].checked) {
n++
}
}
alert(n)
</script>

klubnichkaaa
03.02.2011, 16:04
На работе порой некогда обдумать, написать схемки, протестить. Вообщем твой самый первый ответ и есть правильный. Я взял поменял обращение по id и всё встало на свои места, теперь форма для сообщения не конфликтует. И всё считает, я поместил скрипт в свой компонент его пришлось немного протестить так как он отказался работать но я быстро поправил всё! Но так как к имени у меня выводится xz_'.$raz_na->id.' номер в базе это для проверки чекбоксов и когда приходит письмо показывает что выбрал пользователь. вот надо теперь сделать к имени id буду дальше разбираться обязательно напишу как сделаю так что бы всё работало как надо! Ещё раз спасибо тебе! я тебе юбилейный + ставлю!

ksa
03.02.2011, 16:06
я тебе юбилейный + ставлю
Так красивше смотрится... :D

klubnichkaaa
04.02.2011, 10:05
ksa доп вопрос!
Имя полей у меня не одинаково они всегда будут xz1 xz2 xz3 цифры это id из базы.
вот скрипт я туда поставил rrr переменную и присвоил ей единицу. но она не увеличивается. и считает только первое поле. Как тогда прогнать значение и увеличить его!?

<script type="text/javascript">
function price(form){
var total = 0;
var rrr=1;
for (i=0; i<document.getElementsByName('xz'+rrr).length; i++) {
if (document.getElementsByName('xz'+rrr)[i].checked) {
var b=parseFloat(document.getElementsByName('xz'+rrr)[i].value);
rrr++}
else {
b=0;
}
total+=b;
}
document.getElementById("total_price").innerHTML=total;
document.getElementById("total_prie").value=total;
document.getElementById("total_pr").value=total;}
</script>

ksa
04.02.2011, 10:18
klubnichkaaa, какой-то странный у тебя алгоритм... Количество чекбоксов у тебя всегда одно и тоже?
Если так просто пройдись по ним.



<input type="checkbox" name="xz1" value="100" id="1">;
<input type="checkbox" name="xz2" value="100" id="2" checked>;
<input type="checkbox" name="xz3" value="100" id="3">;

<script>
var i,max=3,n=0
for (i=0; i<max; i++) {
if (document.getElementsByName('xz'+(i+1))[0].checked) {
n++
}
}
alert(n)
</script>

klubnichkaaa
05.02.2011, 11:51
ksa отказался я от мысли поправить ява скрипт решил пойти по другому пути что бы чек боксы проверить.
Мысль такая. Оригинальное поле с чекбоксом будет иметь постоянное имя xz_ и тогда скрипт считает все поля, но тут же ниже я сделал другое скрытое поле box нужно при нажатии на оригинальный чек бокс передать в скрытое поле ноль или 1, данные у меня не статичны полей может быть 5 а может 10 вот рабочий пример я передаю туда значение из чек бокса а именно 100 можно ли в этом же скрипте поместить туда 0 или нужно отдельно писать!? щас вот сижу сам пытаюсь сделать!

<script type="text/javascript">
function price(form){
var total = 0;
for (i=0; i<document.getElementsByName('xz_').length; i++) {
if (document.getElementsByName('xz_')[i].checked) {
var b=parseFloat(document.getElementsByName('xz_')[i].value);
}
else {
b=0;
}
total+=b;
}
document.getElementById("total_price").value=total;
document.getElementById("total_pric").value=total;
document.getElementById("total_pr").value=total;
}
</script>
<form name="form" action="#" onclick="price(this)" method="post">
<input type="hidden" name="tot_pr" value="" id="total_pr" />
<input type="checkbox" name="xz_" value="100" id="1">
<input type="text" id='total_price' value="">

<input id='total_pric' type="hidden" name="box" value="">
</form>

ksa
05.02.2011, 13:46
вот рабочий пример я передаю туда значение из чек бокса а именно 100 можно ли в этом же скрипте поместить туда 0
Если это соответствует какой-то твоей логике - конечно можно.

Я просто не понимаю пока что тебе нужно в итоге... Ранее ты хотел считать "выбраные" чекбоксы, теперь что-то хранить в скрытой переменной формы...

klubnichkaaa
05.02.2011, 14:15
Щас я подробно объясню! Просто я пытаюсь найти оптимальный способ вот и пробую написать!
<?php
$menuMail='<input type="checkbox" name="xz_" id="'.$b.'" value="'.$raz_na->cena.'">'; $b++;
echo $menuMail;
?>
Вот нужно когда человек выбрал чек бокс поместить в скрытую форму значение 1 если не выбрал поставить ноль.
Дальше пользователь заполняет форму и отправляет мне на почту, где включается цикл отправки там я проверяю это скрытое поле = 1 или 0
естественно мне всё это нужно проверить по id иначе данные будут не верны ну это ладно можно подставить переменную и её увеличивать.

Вот пример он не рабочий но я хочу показать что должно быть.


<?php $menuMail='<input type="checkbox" name="xz_" id="'.$b.'" value="'.$raz_na->cena.'">'; $b++; echo $menuMail;?>

<script type="text/javascript">
function box(){
for (i=0; i<document.getElementsByName("box1").length; i++) {
if (document.getElementsByName('xz_1')[i].checked) {
document.write('<input type="hidden" name="box1" value="1">');
}
else {
document.write('<input type="hidden" name="box1" value="0">');
}
}
}
</script>

Сколько записей в базе данных столько он и выведет мне данных, то есть они не статичны. Вообще я так уже понял под цикл php это писать глупо так как если пользователь не выбрал данные скрипт вообще ничего не выведет так что нужно что. Тогда 1 скрипт написать и сделать так нажал чек бокс он пошёл все проверять, идёт цикл скрытое поле 1 выбрано помещаю значение 1 скрытое поле 2 не выбрано помещаю 0 и записать всё это в одну переменную. После чего вывести её со всеми данными. И при каждом щелчке все обновляется.

Может тут и не обязательно нужен ява скрипт, может можно как то иначе я пока этого не знаю.

Мозг лопается ведь чую что тут не так всё ложно, и это решаемо.

Вот пример работы скрипта http://test.eroteks.ru/faq тестовый сайт

А это то что мне приходит на почту

Имя:
E-mail:
Тел:
Текст сообщения:
Заказ: Пример раздел 1
Пример категория 1
Пример наименование 1 100 руб. чекбокс
Пример наименование 2 200 руб. чекбокс
Пример наименование 3 300 руб. чекбокс
Пример категория 2
Пример наименование 2 500 руб. чекбокс
Пример категория 3
Пример наименование 1 600 руб. чекбокс
Пример наименование 2 700 руб. чекбокс
Общая стоимость: 100

До этого чек боксы у меня работали но перестал работать скрипт подсчёта так как он считал по id ты мне помог и сделал обращение по имени, но тогда чек бокс не выбирался. и не приходил на почту, вот я и решил всё это переписать!

klubnichkaaa
05.02.2011, 18:14
Вообщем я пока до такого додумался.
Создал отдельную функцию, при нажатии основного чек бокса выводится текстовое поле с 1. Но первое у меня перезагружается страница и второе он выводит только 1 текстовое поле у меня таких чек боксов сейчас 7 так вот он мне должен вывести одно поле с 1 и остальные 6 с 0

<?php $menuMail='<input type="checkbox" onclick="box(this)" name="xz_" id="'.$b.'" value="'.$raz_na->cena.'">'; $b++; echo $menuMail;?>

<script type="text/javascript">
function box(){
for (i=0; i<document.getElementsByName('xz_').length; i++) {
if (document.getElementsByName('xz_')[i].checked) {
document.write('<input type="text" name="box1" value="1">');
}
else {
document.write('<input type="text" name="box1" value="0">');
}
}
}
</script>

Может что то проще есть! =)

ksa
05.02.2011, 20:05
klubnichkaaa, для твоей задачи предложу такой вариант:
- пусть пользователь выбирает чего хочет
- имя у чекбоксов одинаковое
- есть одно скрытое поле
- перед отправкой в цикле (пример уже был) посчитать количество выбраных чекбоксов
- записать это число в скрытую переменную
- после этого передать форму