Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 18
1

Доработать скрипт

17.10.2016, 10:37. Показов 718. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Скажите, пожалуйста, как сделать чтобы скрипт перебирал все cb и input с любым индексом, т.е. нужно оптимизировать.
Javascript
1
2
3
4
5
6
7
8
9
<script> 
function check() { 
    if (document.forma.cb1.checked) { 
        document.forma.input1.value="1"; 
    } else { 
        document.forma.input1.value="0"; 
    } 
} 
</script>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2016, 10:37
Ответы с готовыми решениями:

Доработать скрипт
Есть скрипт который меняет картинки через интервал времени, очень нужно добавить надписи к...

Не могу доработать скрипт
Здравствуйте!!! Помогите пожалуйста с такой проблеммой.Есть скрипт который на странице каждой...

Доработать скрипт тональности аккордов
Доброго времени суток! У себя на сайте делаю раздел с аккордами для гитары и нужно сделать смену...

Доработать скрипт на проверку введенных данных
Доброго времени суток! Помогите доработать скрипт. Нужно чтобы выполнялась проверка трех полей...

19
13 / 13 / 16
Регистрация: 31.12.2015
Сообщений: 85
17.10.2016, 16:19 2
Angelnarina19, Если не сложно больше конкретики, где перебирал, зачем и тому подобное, будет легче понять что вы хотите.
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 18
18.10.2016, 04:47  [ТС] 3
Подробнее: реализую калькулятор цен, нужно чтобы значения чеквоксов было 1 либо 0, в зависимости от того стоит галка или нет, чтобы задействовать их далее в формулах.
HTML5
1
2
3
4
<input type="checkbox" onclick="check()" value="0" name="cb1" id="cb1"><input type="hidden"  name="input1">
<input type="checkbox" onclick="check()" value="0" name="cb2" id="cb2"><input type="hidden"  name="input2">
.....
<input type="checkbox" onclick="check()" value="0" name="cb50" id="cb50"><input type="hidden"  name="input50">
далее input участвуют в формулах

Мне нужно чтобы скрипт был для cb1 cb2 cb3 ....cbn, input1 input2 input3 .....inputn, сейчас только для cb1 и для input1
0
the hardway first
Эксперт JS
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
18.10.2016, 09:18 4
Angelnarina19, уберите onclick="check()" с чекбоксов. Сделайте по-человечески, повесьте обработчики, когда документ загружен.
Цитата Сообщение от Angelnarina19 Посмотреть сообщение
нужно чтобы значения чеквоксов было 1 либо 0
Когда говорят подробнее, постарайтесь предоставить минимально воспроизводимую проблему в вашем конкретном случае, а не кусок вырванного из контекста кода.
Судя по тому, что вы предоставили, могу предложить такое решение, но наверняка оно вам не подойдет:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var check = function () {
  // так чекбоксов?
  this.value = this.checked ? 1 : 0;
  // или текстовых полей рядом с ними?
  this.nextElementSibling.value = this.checked ? 1 : 0;
};
 
document.addEventListener('DOMContentLoaded', function () {
  var checkboxes = document.querySelectorAll('input[id^="cb"]');
  
  // или же необходимо проверять сразу все чекбоксы по клику?
  var checkAll = function () {
    for (var i = 0, l = checkboxes.length; i < l; i++) {
      check.apply(checkboxes[i]);
    };
  };
  
  for (var i = 0, l = checkboxes.length; i < l; i++) {
    checkboxes[i].addEventListener('change', check);
    checkboxes[i].addEventListener('click', checkAll);
  };
});
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 18
18.10.2016, 13:00  [ТС] 5
Вот что у меня имеется.. Смущает меня скрипт, нужно оптимизировать
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<script> 
function check() { 
    if (document.forma.cb1.checked) { 
        document.forma.input1.value="1"; 
    } else { 
        document.forma.input1.value="0"; 
    } 
    if (document.forma.cb2.checked) { 
        document.forma.input2.value="1"; 
    } else { 
        document.forma.input2.value="0"; 
    } 
   if (document.forma.cb3.checked) { 
        document.forma.input3.value="1"; 
    } else { 
        document.forma.input3.value="0"; 
    } 
   if (document.forma.cb4.checked) { 
        document.forma.input4.value="1"; 
    } else { 
        document.forma.input4.value="0"; 
    } 
   if (document.forma.cb5.checked) { 
        document.forma.input5.value="1"; 
    } else { 
        document.forma.input5.value="0"; 
    } 
   if (document.forma.cb6.checked) { 
        document.forma.input6.value="1"; 
    } else { 
        document.forma.input6.value="0"; 
    } 
 
} 
</script> 
 
</head>
<body>
 
<form name="forma">
<table>
<tr>
<td width="65%" class="center"><strong>ыпывпчпы</strong></td>
<td width="15%" class="center"><strong>аирчаичич</strong></td>
<td width="20%" class="center" colspan="2"><strong>чаипаисаиса</strong></td>
</tr>
<tr>
<td class="left">рвапвпвпв</td>
<td class="center">вапвапвапв</td>
<td class="center">294,40</td>
<td class="center"><input type="checkbox" onclick="check()" value="0" name="cb1" id="cb1"/><input type="hidden"  name="input1"/></td>
</tr>
<tr>
<td class="left">Регистрация проб, подготовка к анализу</td>
<td class="center">проба</td>
<td class="center">63,20</td>
<td class="center"><input type="checkbox" onclick="check()" value="val1" name="cb2" id="cb2"/><input type="hidden" value=" Не отмечено" name="input2"/></td>
</tr>
<tr>
<td class="left">Регистрация проб, подготовка к анализу</td>
<td class="center">проба</td>
<td class="center">533,20</td>
<td class="center"><input type="checkbox" onclick="check()" value="val1" name="cb3" id="cb3"/><input type="hidden" value=" Не отмечено" name="input3"/></td>
</tr>
<tr>
<td class="left">Регистрация проб, подготовка к анализу</td>
<td class="center">проба</td>
<td class="center">533,20</td>
<td class="center"><input type="checkbox" onclick="check()" value="val1" name="cb4" id="cb4"/><input type="hidden" value=" Не отмечено" name="input4"/></td>
</tr>
<tr>
<td class="left">Регистрация проб, подготовка к анализу</td>
<td class="center">проба</td>
<td class="center">533,20</td>
<td class="center"><input type="checkbox" onclick="check()" value="val1" name="cb5" id="cb5"/><input type="hidden" value=" Не отмечено" name="input5"/></td>
</tr>
<tr>
<td class="left">Регистрация проб, подготовка к анализу</td>
<td class="center">проба</td>
<td class="center">533,20</td>
<td class="center"><input type="checkbox" onclick="check()" value="val1" name="cb6" id="cb6"/><input type="hidden" value=" Не отмечено" name="input6"/></td>
</tr>
<tr>
<td class="center" colspan="2"><input type="button" value="Итого" onclick='r.value=(input1.value*294.40)+(input2.value*63.20)+(input3.value*533.20)+(input4.value*533.20)+(input5.value*533.20)+(input6.value*533.20)' />
<td class="center" colspan="2"><output for="input1 input2 input3 input4 input5 input6" name="r">0</output></td>
</tr>
</table></form>
</body>
0
the hardway first
Эксперт JS
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
18.10.2016, 13:35 6
Javascript
1
2
3
4
5
6
  function check() {
    var checkboxes = [].slice.call(document.querySelectorAll('input[id^="cb"]'));
    checkboxes.forEach(function (checkbox) {
      checkbox.nextElementSibling.value = checkbox.checked ? 1 : 0;
    });
  };
1
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 18
19.10.2016, 10:33  [ТС] 7
Огроменное спасибо за функцию! Есть еще проблема: функция CheckAll() ставит галки или убирает во всех чекбоксах. Проблема в том, что когда галки все выделены то "итого" не считает вообще. Ка я понимаю в функцию CheckAll() надо прописать из функции Check(). Помогите поожалуйста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<script>
function CheckAll()
{
  var i;
  for(i=0; i<document.forma.elements.length; i++)
  {
    if(document.forma.ch.checked==true)
    {document.forma.elements[i].checked=true;}
    else {document.forma.elements[i].checked=false;}
  }
}
</script>
 
<script> 
  function check() {
    var checkboxes = [].slice.call(document.querySelectorAll('input[id^="cb"]'));
    checkboxes.forEach(function (checkbox) {
      checkbox.nextElementSibling.value = checkbox.checked ? 1 : 0;
    });
  };  
</script>
  
</head>
<body>
 
<form name="forma">
<table>
<tr>
<td width="65%" class="center"><strong>ыпывпчпы</strong></td>
<td width="15%" class="center"><strong>аирчаичич</strong></td>
<td width="20%" class="center"><strong>чаипаисаиса</strong></td>
<td width="20%" class="center"> <input name="ch" type="checkbox" onClick="CheckAll()"/> </td>
</tr>
<tr>
<td class="left">рвапвпвпв</td>
<td class="center">вапвапвапв</td>
<td class="center">294,40</td>
<td class="center"><input type="checkbox" onclick="check()" value="0" name="cb1" id="cb1"/><input type="hidden"  name="input1"/></td>
</tr>
<tr>
<td class="left">Регистрация проб, подготовка к анализу</td>
<td class="center">проба</td>
<td class="center">63,20</td>
<td class="center"><input type="checkbox" onclick="check()" value="0" name="cb2" id="cb2" /><input type="hidden" name="input2"/></td>
</tr>
<tr>
<td class="left">Регистрация проб, подготовка к анализу</td>
<td class="center">проба</td>
<td class="center">533,20</td>
<td class="center"><input type="checkbox" onclick="check()" value="0" name="cb3" id="cb3" /><input type="hidden" name="input3"/></td>
</tr>
<tr>
<td class="left">Регистрация проб, подготовка к анализу</td>
<td class="center">проба</td>
<td class="center">533,20</td>
<td class="center"><input type="checkbox" onclick="check()" value="0" name="cb4" id="cb4" /><input type="hidden" name="input4"/></td>
</tr>
<tr>
<td class="left">Регистрация проб, подготовка к анализу</td>
<td class="center">проба</td>
<td class="center">533,20</td>
<td class="center"><input type="checkbox" onclick="check()" value="0" name="cb5" id="cb5"/><input type="hidden" name="input5"/></td>
</tr>
<tr>
<td class="left">Регистрация проб, подготовка к анализу</td>
<td class="center">проба</td>
<td class="center">533,20</td>
<td class="center"><input type="checkbox" onclick="check()" value="0" name="cb6" id="cb6" /><input type="hidden" name="input6"/></td>
</tr>
<tr>
<td class="center" colspan="2"><input type="button" value="Итого" onclick='r.value=(input1.value*294.40)+(input2.value*63.20)+(input3.value*533.20)+(input4.value*533.20)+(input5.value*533.20)+(input6.value*533.20)' />
<td class="center" colspan="2"><output for="input1 input2 input3 input4 input5 input6" name="r">0</output></td>
</tr>
</table></form>
Добавлено через 1 час 2 минуты
Ломаю голову еще над округлением число "r". Можно ли прям onclickи прописать округление без скрипта
HTML5
1
<input type="button" value="Итого" onclick='r.value=(input1.value*294.40)+........
0
the hardway first
Эксперт JS
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
19.10.2016, 11:23 8
Цитата Сообщение от Angelnarina19 Посмотреть сообщение
Ка я понимаю в функцию CheckAll() надо прописать из функции Check().
Добавьте в конец CheckAll() вызов check().

Добавлено через 1 минуту
HTML5
1
onclick='r.value=((input1.value*294.40)+(input2.value*63.20)+(input3.value*533.20)+(input4.value*533.20)+(input5.value*533.20)+(input6.value*533.20)).toFixed(2)'
Добавлено через 47 минут
По уму бы переделать совсем, убрать с элементов onclick, повесить всю обработку на onchange, но...
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function processCheckboxes (callback) {
  var checkboxes = [].slice.call(document.querySelectorAll('input[id^="cb"]'));
  checkboxes.forEach(callback);
};
function CheckAll () {
  var checked = document.forma.ch.checked;
  processCheckboxes(function (checkbox) {
    checkbox.checked = checked;
  });
  check();
};
function check() {
  processCheckboxes(function (checkbox) {
    checkbox.nextElementSibling.value = checkbox.checked ? 1 : 0;
  });
};
1
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 18
20.10.2016, 06:54  [ТС] 9
Уважаемый j2FunOnly, я вам очень благодарна за решение моей проблемы!
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 18
21.10.2016, 07:30  [ТС] 10
У меня еще один камень преткновения: мне надо чтобы было так
если b=0 то a=b+0 иначе a=b+200

HTML5
1
onclick='if (b.value=0) {a.value=b.value+0;} else {a.value=b.value+200;}'
0
Эксперт JS
2454 / 1761 / 624
Регистрация: 11.07.2016
Сообщений: 4,051
21.10.2016, 09:45 11
Angelnarina19, не забывайте, что есть огромная разница между оператором "=" и оператором "=="
HTML5
1
onclick='if (b.value==0) {a.value=b.value+0;} else {a.value=b.value+200;}'
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 18
21.10.2016, 10:54  [ТС] 12
Интересно получается, он складывает числа в прямом смысле например a=63.2+200=63.2200, где b=63.2
причем умножение, деление и вычитание работает как надо
0
Эксперт JS
2454 / 1761 / 624
Регистрация: 11.07.2016
Сообщений: 4,051
21.10.2016, 11:08 13
Angelnarina19, потому что оператор "+" - это не только оператор суммирования чисел, но еще и оператор конкатенации строк. a.value и b.value в нашем случае возвращают тип "строка". Если JS получает для обработки тип данных, не соответствующий ожидаемому (например как в нашем случае, a.value * b.value - вы пытаетесь перемножить две строки), то JS попытается привести типы данных в соответствующие (строка преобразуется в число и затем выполнится действие). В случае с оператором "+" - JS видит, что вы пытаетесь сложить 2 строки. Он их и складывает. Чтобы сложить именно числа, представленные строкой, необходимо сначала преобразовать типы:
Javascript
1
2
3
4
var a = "63.2";
var b = "200";
alert(a + b); // "63.2200"
alert(parseFloat(a) + parseFloat(b)); // 263.2
parseFloat(x) преобразует строку x в число с плавающей точкой
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 18
28.10.2016, 06:31  [ТС] 14
Что я не так сделала?
Мне надо чтобы если tm=0 то tms=0 иначе tms=tm+400
и далее если tms=0 и an=0 то tmo=0 иначе tmo=tms+an+600
Javascript
1
2
3
4
5
6
7
8
9
function met() {
var tm=(document.forma.input23.value*259.9)+(document.forma.input24.value*305.4);
var an=(document.forma.input1.value*294.40)+(document.forma.input2.value*100);
if (tm==0 && an==0) 
document.forma.tmo.value=0;} 
else {
{if (tm==0) {tms=0;} else {tms=(parseFloat(tm)+parseFloat(400);}
document.forma.tmo.value=parseFloat(tm)+parseFloat(an)+parseFloat(600);}
}
0
Эксперт JS
2454 / 1761 / 624
Регистрация: 11.07.2016
Сообщений: 4,051
28.10.2016, 08:59 15
А в чем ошибка то?
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 18
28.10.2016, 09:04  [ТС] 16
кнопка не реагирует, расчет не происходит, значит где-то ошибка
0
Эксперт JS
2454 / 1761 / 624
Регистрация: 11.07.2016
Сообщений: 4,051
28.10.2016, 09:08 17
HTML разметку прикрепите. Посмотрим что там у вас

Добавлено через 16 секунд
И что выдает консоль? Молчит?
0
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 18
28.10.2016, 09:15  [ТС] 18
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<html xmlns="http://www.w3.org/1999/xhtml">
 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Виды анализов</title>
<script> 
function met() {
var tm=(document.forma.input23.value*259.9)+(document.forma.input24.value*305.4);
var an=(document.forma.input1.value*294.40)+(document.forma.input2.value*100);
if (tm==0 && an==0) 
{document.forma.tmo.value=0;} 
else {
{if (tm==0) {tms=0;} else {tms=(parseFloat(tm)+parseFloat(400);}
document.forma.tmo.value=parseFloat(tm)+parseFloat(an)+parseFloat(600);}
}
</script> 
 
</head>
 
<body>
<form name="forma">
<table border="1" class="no-indent" width="100%">
 
<tr>
<td width="75%">dfgsdgfgd</td>
<td width="20%">cfbdfbdfbdf</td>
<td width="5%" >dfgdfgdfgdfg</td>
</tr>
 
<tr>
<td class="left">gfhgfh</td>
<td class="center">294,40</td>
<td class="center"><input type="checkbox" onclick="check()" value="0" name="cb1" id="cb1"/><input type="hidden"  name="input1"/></td>
</tr>
 
<tr>
<td class="left">thfhfghf</td>
<td class="center">100,00</td>
<td class="center"><input type="checkbox" onclick="check()" value="0" name="cb2" id="cb2"/><input type="hidden"  name="input2"/></td>
</tr>
 
<tr>
<td class="left" colspan="3" style="font-style:oblique">xdfgdfg</td>
</tr>
 
<tr>
<td class="left">thfgthgfth</td>
<td class="center">259,90</td>
<td class="center"><input type="checkbox" onclick="check()" value="0" name="cb23" id="cb23"/><input type="hidden"  name="input23"/></td>
</tr>
 
<tr>
<td class="left">fghgfhgf</td>
<td class="center">305,40</td>
<td class="center"><input type="checkbox" onclick="check()" value="0" name="cb24" id="cb24"/><input type="hidden"  name="input24"/></td>
</tr>
 
<tr>
<td class="center">
<input type="button" value="Итого" onclick='met()' />
<td class="center" colspan="2"><strong><output for="tm an tms input23 input24 input1 input2" name="tmo">0.00</output></strong></td>
</tr>
 
</table></form>
 
</body>
</html>
0
Эксперт JS
2454 / 1761 / 624
Регистрация: 11.07.2016
Сообщений: 4,051
28.10.2016, 09:38 19
Приведем в относительный порядок код. Исправим несколько синтаксических ошибок:
Javascript
1
2
3
4
5
6
7
8
function met() {
  var tm = document.forma.input23.value * 259.9 + document.forma.input24.value * 305.4;
  var an = document.forma.input1.value * 294.40 + document.forma.input2.value * 100;
  if (tm==0 && an==0) document.forma.tmo.value=0; else {
    if (tm==0) tms=0; else tms = tm + 400;
    document.forma.tmo.value = tm + an + 600;
  }
}
Теперь все в порядке?

Добавлено через 9 минут
Это мы решили проблему не реагировавшей кнопки. Теперь по поводу расчетов:
- Все ваши инпуты имеют атрибут value равный 0. Устанавливайте значения там;
- Для input23 и input24 вообще не заданы атрибуты value. Возможно вы имели в виду cb23 и cb24;
1
0 / 0 / 0
Регистрация: 07.09.2016
Сообщений: 18
28.10.2016, 09:41  [ТС] 20
Перемудрила изрядно.... Спасибо большое

все у меня считает

я забыла дабавить еще один скипт для input и cb
0
28.10.2016, 09:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2016, 09:41
Помогаю со студенческими работами здесь

Как доработать скрипт проверки в поля ввода?
Есть следующий код: $(function () { $('#login,#password') .on('input', function (e) {...

Необходимо вставить в скрипт увеличения картинки, скрипт просмотра панорамы 360
Здравствуйте. У меня такой специфический вопрос, на моем сайте имеется скрипт для увеличения...

Вызвать скрипт через другой скрипт
Всем привет! Такая ситуация. Есть скрипт 1, который служит для аякс подгрузки новостей. Есть скрипт...

Доработать скрипт расчета стоимости топлива
Друзья, приветствую! Подскажите (незадорого напишите), что нужно добавить, чтобы заработала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru