Сумма полей должна быть равна 100, проверка
Здравствуйте! Есть задача в списке инпутов проверить сумму всех полей. Необходимо чтобы если пользователь вводит цифры и сумма не равна 100 то поля подсвечивалась красным например, подскажите как реализовать!
Код полей такой: <div class="poisk2" align="right"> <u>Процент использования</u><br> Закладки <input type="number" name="check[0]" id="check-0" min="0" max="100" value="30"> %<br /> Yandex.ru <input type="number" name="check[1]" id="check-1" min="0" max="100" value="40"> %<br /> Google.ru <input type="number" name="check[2]" id="check-2" min="0" max="100" value="20"> %<br /> Nigma .ru <input type="number" name="check[3]" id="check-3" min="0" max="100" value="10"> %<br /> Qip.ru <input type="number" name="check[4]" id="check-4" min="0" max="100" value="0"> %<br /> Go.mail.ru <input type="number" name="check[5]" id="check-5" min="0" max="100" value="0"> %<br /> Rambler.ru <input type="number" name="check[6]" id="check-6" min="0" max="100" value="0"> %<br /> Google.com.ua <input type="number" name="check[7]" id="check-7" min="0" max="100" value="0"> %<br /> Meta.ua <input type="number" name="check[8]" id="check-8" min="0" max="100" value="0"> %<br /> Yandex.ua <input type="number" name="check[9]" id="check-9" min="0" max="100" value="0"> %<br /> Bigmir.net <input type="number" name="check[10]" id="check-10" min="0" max="100" value="0"> %<br /> Bing.com <input type="number" name="check[11]" id="check-11" min="0" max="100" value="0"> %<br /> Yandex.com <input type="number" name="check[12]" id="check-12" min="0" max="100" value="0"> %<br /> </div> Пробовал так, но нужно привязаться к конкретному виду полей (т.к. есть и другие разновидности), + нужно как то задать стиль подсветки.. var s = 0; $(document).ready(function() { $.each($('input'), function(key, val) { s = s + parseInt(val.value); }); alert(s); }); Заранее спасибо. |
lolpops, так?
<!doctype html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <div class="poisk2" align="right"> <u>Процент использования</u><br> Закладки <input type="number" name="check[0]" id="check-0" min="0" max="100" value="30"> %<br /> Yandex.ru <input type="number" name="check[1]" id="check-1" min="0" max="100" value="40"> %<br /> Google.ru <input type="number" name="check[2]" id="check-2" min="0" max="100" value="20"> %<br /> Nigma.ru <input type="number" name="check[3]" id="check-3" min="0" max="100" value="10"> %<br /> Qip.ru <input type="number" name="check[4]" id="check-4" min="0" max="100" value="0"> %<br /> Go.mail.ru <input type="number" name="check[5]" id="check-5" min="0" max="100" value="0"> %<br /> Rambler.ru <input type="number" name="check[6]" id="check-6" min="0" max="100" value="0"> %<br /> Google.com.ua <input type="number" name="check[7]" id="check-7" min="0" max="100" value="0"> %<br /> Meta.ua <input type="number" name="check[8]" id="check-8" min="0" max="100" value="0"> %<br /> Yandex.ua <input type="number" name="check[9]" id="check-9" min="0" max="100" value="0"> %<br /> Bigmir.net <input type="number" name="check[10]" id="check-10" min="0" max="100" value="0"> %<br /> Bing.com<input type="number" name="check[11]" id="check-11" min="0" max="100" value="0"> %<br /> Yandex.com <input type="number" name="check[12]" id="check-12" min="0" max="100" value="0"> %<br /> </div> <script> var wrap = document.querySelector('.poisk2'), inpElems = wrap.querySelectorAll('input[type=number]'); wrap.onchange = function(e) { var target = e.target; if (target.tagName.toLowerCase() != 'input') return; var result = [].reduce.call(inpElems, function(current, next) { return (+current.value || +current) + +next.value; }); if (result <= 100) { target.style.background = 'red'; } }; </script> </body> </html> |
У меня ничего не происходит при первышении суммы 100...
|
Цитата:
Цитата:
|
Замени
if (result <= 100) { target.style.background = 'red'; } на if (result > 100) { target.style.background = 'red'; } |
Decode Спасибо, но все равно не работает как нужно..если написать в сумме значения обратно = 100, то поля красными так и остаются..можете поправить?
|
var wrap = document.querySelector('.poisk2'), inpElems = wrap.querySelectorAll('input[type=number]'); wrap.onchange = function(e) { var target = e.target; if (target.tagName.toLowerCase() != 'input') return; var result = [].reduce.call(inpElems, function(current, next) { return (+current.value || +current) + +next.value; }); if (result > 100) { target.style.background = 'red'; alert('Сумма должна быть равна 100%'); } if (result == 100) { target.style.background = 'white'; } }; Изменил так, но все равно остаются некоторые поля красными которые например начинал менять вручную..И скрипт не работает на моем сайте..пробовал отключать jquery, ноль эмоций. |
замени
target.style.background = 'white'; на [].forEach.call(inpElems, function(item) { item.style.background = 'white'; }); |
Цитата:
var wrap = document.querySelector('.poisk2'), inpElems = wrap.querySelectorAll('input[type=number]'); wrap.onchange = function(e) { var target = e.target; if (target.tagName.toLowerCase() != 'input') return; var result = [].reduce.call(inpElems, function(current, next) { return (+current.value || +current) + +next.value; }); if (result > 100) { target.style.background = 'red'; } if (result == 100) { [].forEach.call(inpElems, function(item) { item.style.background = 'white'; }); } }; не работает, если поиграться с кнопочками будет такая ситуация что они не станут белыми.. |
lolpops, а вы можете нормально написать условие? Так?
<!doctype html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <div class="poisk2" align="right"> <u>Процент использования</u><br /> Закладки <input type="number" name="check[0]" id="check-0" min="0" max="100" value="30"> %<br /> Yandex.ru <input type="number" name="check[1]" id="check-1" min="0" max="100" value="40"> %<br /> Google.ru <input type="number" name="check[2]" id="check-2" min="0" max="100" value="20"> %<br /> Nigma.ru <input type="number" name="check[3]" id="check-3" min="0" max="100" value="10"> %<br /> Qip.ru <input type="number" name="check[4]" id="check-4" min="0" max="100" value="0"> %<br /> Go.mail.ru <input type="number" name="check[5]" id="check-5" min="0" max="100" value="0"> %<br /> Rambler.ru <input type="number" name="check[6]" id="check-6" min="0" max="100" value="0"> %<br /> Google.com.ua <input type="number" name="check[7]" id="check-7" min="0" max="100" value="0"> %<br /> Meta.ua <input type="number" name="check[8]" id="check-8" min="0" max="100" value="0"> %<br /> Yandex.ua <input type="number" name="check[9]" id="check-9" min="0" max="100" value="0"> %<br /> Bigmir.net <input type="number" name="check[10]" id="check-10" min="0" max="100" value="0"> %<br /> Bing.com<input type="number" name="check[11]" id="check-11" min="0" max="100" value="0"> %<br /> Yandex.com <input type="number" name="check[12]" id="check-12" min="0" max="100" value="0"> %<br /> </div> <script> var wrap = document.querySelector('.poisk2'), inpElems = wrap.querySelectorAll('input[type=number]'); wrap.onchange = function(e) { var target = e.target, result = 0; if (target.tagName.toLowerCase() != 'input') return; for (var i = 0; i < inpElems.length; i++) { result += +inpElems[i].value; } if (result <= 100) { [].forEach.call(inpElems, function(item) { item.style.background = ''; }); } else { target.style.background = 'red'; } !target.value && (target.value = 0); }; </script> </body> </html> Цитата:
|
Часовой пояс GMT +3, время: 05:19. |