Помощи в скрипте
Возможно сделать из двух действий одно
var kolvo1 = f.elements['kolvo1'].value;
var kolvo1 = kolvo1.replace(",",".");
|
var kolvo1 = f.elements['kolvo1'].value.replace(",",".");
пока сделал так |
теперь стал вопрос если у меня kolvo1...15
15 строк нужен цикл, но не понимаю как эту строку засунуть в цикл |
UJKJDF,
напишите функцию которая будет возвращать нужный результат, пока маловато от вас информации, может в целом опишите алгоритм. |
var i = 1;
var kolvo1 = f.elements['kolvo'+i].value.replace(",",".");
// так тоже работает, но как зациклить имя var kolvo1
|
UJKJDF,
а зачем вам 15 переменных? |
беру данные из input 15 вводимых ячеек и каждому присваиваю свою переменную после определенных действий вывожу все 15 результатов
|
UJKJDF,
вполне хватит 1 переменной |
ок попробую сделать решение с циклом для одной переменной
|
UJKJDF,
определённые действия это что? |
Похоже он эти национальные запятые в точки превращает для float.
|
суммирую все данные введенных ячеек вычисляю процент от всех введенных данных добавляю еще одну цифру которую распределяю в процентном соотношении по всем ячейкам и вывожу получившийся результат по каждой ячейке при это разделив каждое значение на определенную цифру.
Про точки и запятые превращаю введенные данные в число не зависимо от того как ввели число с запятой или с точкой |
процент от общей суммы
UJKJDF,
ввести числа в инпуты ...
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script>
window.addEventListener("DOMContentLoaded", function() {
function c() {
var d = a.reduce(function(b, a) {
return b + a
}, 0);
a.forEach(function(a, c) {
var e = 100 * a / d,
h = 80 * e / 100,
g = f[c].cells;
g[1].innerHTML = e.toFixed(2) + "%";
g[2].innerHTML = h.toFixed(2)
})
}
var f = document.querySelectorAll("tbody tr"),
a = [];
[].forEach.call(f, function(d, b) {
a[b] = 0;
d.querySelector("input").addEventListener("input", function() {
a[b] = +this.value.replace(",", ".") || 0;
c()
})
})
});
</script>
</head>
<body>
<table width="400" summary="" >
<thead>
<tr>
<th>num</th>
<th>%</th>
<th>x = 80</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text"></td>
<td></td>
<td></td>
</tr>
<tr>
<td><input type="text"></td>
<td></td>
<td></td>
</tr>
<tr>
<td><input type="text"></td>
<td></td>
<td></td>
</tr>
<tr>
<td><input type="text"></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</body>
</html>
|
Да пойдет не если я захочу поставить вместо <th>x = 80</th>
<th><input type="text" ></th> ячейку в которую буду вводить число
a.forEach(function(a, c) {
var e = 100 * a / d,
h = 80 * e / 100, // что здесь надо поставить вместо 80?
g = f[c].cells;
g[1].innerHTML = e.toFixed(2) + "%";
g[2].innerHTML = h.toFixed(2)
|
UJKJDF,
а как вы обычно получаите значение из инпута? |
UJKJDF,
нулевая ячейка для первого инпута, в сумме всего не учавствует, таблице дан класс.
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script>
window.addEventListener("DOMContentLoaded", function() {
function c() {
var d = a.reduce(function(b, a, i) {
return i ? b + a : 0
}, 0);
a.forEach(function(k, c) {
if(!c||!d) return;
var e = 100 * k / d,
h = a[0] * e / 100,
g = f[c].cells;
g[1].innerHTML = e.toFixed(2) + "%";
g[2].innerHTML = h.toFixed(2)
})
}
var f = document.querySelectorAll(".harvest tr"),
a = [];
[].forEach.call(f, function(d, b) {
a[b] = 0;
d.querySelector("input").addEventListener("input", function() {
a[b] = +this.value.replace(",", ".") || 0;
c()
})
})
});
</script>
</head>
<body>
<table width="400" class="harvest" >
<thead>
<tr>
<th>num</th>
<th>%</th>
<th><input type="text"></th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text"></td>
<td></td>
<td></td>
</tr>
<tr>
<td><input type="text"></td>
<td></td>
<td></td>
</tr>
<tr>
<td><input type="text"></td>
<td></td>
<td></td>
</tr>
<tr>
<td><input type="text"></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</body>
</html>
|
вывожу результат что хотел сделать
теперь возник вопрос как при выборе радиокнопки (С НДС) h = k + a[0] * e / 100, (еще разделить на 1.18)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title> poni</title>
<script>
window.addEventListener("DOMContentLoaded", function() {
function c() {
var d = a.reduce(function(b, a, i) {
return i ? b + a : 0
}, 0);
a.forEach(function(k, c) {
if(!c||!d) return;
var e = 100 * k / d,
h = k + a[0] * e / 100,
g = f[c].cells;
g[2].innerHTML = e.toFixed(0) + "%";
g[3].innerHTML = h.toFixed(4)
})
}
var f = document.querySelectorAll("tbody tr"),
a = [];
[].forEach.call(f, function(d, b) {
a[b] = 0;
d.querySelector("input").addEventListener("input", function() {
a[b] = +this.value.replace(",",".") || 0;
c()
})
})
});
</script>
</head>
Распределение доставки по позициям
<table summary="" border="1" bordercolor="red" style="color:red;font-size:20px;">
<thead>
<tr>
<th>ЦЕНЫ<br> <input type="radio" name="disc" checked value="1" >Без НДС
<input type="radio" name="disc" value="1.18" >С НДС</th>
<th>ВВОДИМ ЦЕНУ</th>
<th>%</th>
<th>Результат без НДС</th>
</tr>
</thead>
<tbody>
<tr>
<td width="250">Укажите стоимость доставки</td>
<td><input type="text" style="color:red;font-size:20px;" placeholder="ДОСТАВКА" size="15" maxlength="15"></td>
<td align="center" width="50"></td>
<td align="left" width="100"></td>
</tr>
<tr>
<td align="right">Цена =</td>
<td><input type="text" style="color:red;font-size:20px;" placeholder="ВВОДИМ ЦЕНУ" size="15" maxlength="15"></td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">Цена =</td>
<td><input type="text" style="color:red;font-size:20px;" placeholder="ВВОДИМ ЦЕНУ" size="15" maxlength="15"></td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">Цена =</td>
<td><input type="text" style="color:red;font-size:20px;" placeholder="ВВОДИМ ЦЕНУ" size="15" maxlength="15"></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<body>
</body>
</html>
|
UJKJDF,
:-? учебник почитать может ... if(чекбокс.чекед) h /= 1.18; |
делю на значение выбранной кнопки
value=1 или 1.18 предварительно сделав этот текст числом если это надо сделать var rad = f.elements['disc'].value; // что должно быть вместо f ? h = (k + a[0] * e / 100)/ parseFloat(rad); |
попаразитировала на последнем примере от рони,
так должно быть?
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title> poni</title>
<script>
window.addEventListener("DOMContentLoaded", function() {
function c() {
var d = a.reduce(function(b, a, i) {
return i ? b + a : 0
}, 0);
a.forEach(function(k, c) {
if(!c||!d) return;
//Добавила
var koef = document.querySelectorAll("[name='disc']")[1].checked ? 1.18 : 1
var e = 100 * k / d,
h = a[0] * e / 100 / koef,//Добавила
g = f[c].cells;
g[2].innerHTML = e.toFixed(2) + "%";
g[3].innerHTML = h.toFixed(2)
})
}
var f = document.querySelectorAll("tbody tr"),
a = [];
[].forEach.call(f, function(d, b) {
a[b] = 0;
d.querySelector("input").addEventListener("input", function() {
a[b] = +this.value.replace(",", ".") || 0;
c()
})
})
//Добавила
var disc = document.querySelectorAll("[name='disc']");
[].forEach.call(disc, function(el) {
el.addEventListener("click", c)
})
});
</script>
</head>
Распределение доставки по позициям
<table summary="" border="1" bordercolor="red" style="color:red;font-size:20px;">
<thead>
<tr>
<th>ЦЕНЫ<br> <input type="radio" name="disc" checked value="1" >Без НДС
<input type="radio" name="disc" value="1.18" >С НДС</th>
<th>ВВОДИМ ЦЕНУ</th>
<th>%</th>
<th>Результат без НДС</th>
</tr>
</thead>
<tbody>
<tr>
<td width="250">Укажите стоимость доставки</td>
<td><input type="text" style="color:red;font-size:20px;" placeholder="ДОСТАВКА" size="15" maxlength="15"></td>
<td align="center" width="50"></td>
<td align="left" width="100"></td>
</tr>
<tr>
<td align="right">Цена =</td>
<td><input type="text" style="color:red;font-size:20px;" placeholder="ВВОДИМ ЦЕНУ" size="15" maxlength="15"></td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">Цена =</td>
<td><input type="text" style="color:red;font-size:20px;" placeholder="ВВОДИМ ЦЕНУ" size="15" maxlength="15"></td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">Цена =</td>
<td><input type="text" style="color:red;font-size:20px;" placeholder="ВВОДИМ ЦЕНУ" size="15" maxlength="15"></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<body>
</body>
</html>
|
Мда ребята, таким как вы минификаторы кода не нужны, вы и сами справляетесь :) Сами через неделю нихера не поймёте, что эти a, b, с и d значат.
|
Manyasha,
:) |
Sigizmund2012,
а нам и не надо:dance: А автору, если он захочет переименовать функции более понятно, придется разобраться, что они делают (название-то суть должно отражать). Глядишь и запомнит что-нибудь полезное)) |
Спасибо проверю!
вопрос как написать сообщение чтобы появилась кнопка посмотреть? скриптам только учась в свободное время вот решил написать, но первоначальный вариант был слишком длинный и куча переменных к каждому вводимому значению что получиться позже скину. |
UJKJDF,
[HTML run height=300][/HTML] Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title> ДОСТАВКА</title>
<script type="text/javascript">
window.addEventListener("DOMContentLoaded", function() {
function c() {
var d = a.reduce(function(b, a, i) {
return i ? b + a : 0
}, 0);
a.forEach(function(k, c) {
if(!c||!d) return;
var koef = document.querySelectorAll("[name='disc']")[1].checked ? 1.18 : 1
// var itog = document.querySelectorAll("[name='disc']")[1].checked ? 1 : 1.18
var e = 100 * k / d,
h = (a[0] * e / 100 + k)/koef,
// itogi = (a[0] * e / 100 + k)*itog,
g = f[c].cells;
g[2].innerHTML = e.toFixed(0) + "%";
g[3].innerHTML = h.toFixed(4)
//g[4].innerHTML = itogi.toFixed(2)
})
}
var f = document.querySelectorAll("tbody tr"),
a = [];
[].forEach.call(f, function(d, b) {
a[b] = 0;
d.querySelector("input").addEventListener("input", function() {
a[b] = +this.value.replace(",", ".") || 0;
c()
})
})
var disc = document.querySelectorAll("[name='disc']");
[].forEach.call(disc, function(el) {
el.addEventListener("click", c)
})
});
function addRow(id){
var tbody = document.getElementById(id).getElementsByTagName("TBODY")[0];
var row = document.createElement("TR")
var td1 = document.createElement("TD")
td1.appendChild(document.createTextNode("Цена ="))
var td2 = document.createElement("TD")
var td3 = document.createElement("TD")
var td4 = document.createElement("TD")
row.appendChild(td1);
row.appendChild(td2);
row.appendChild(td3);
row.appendChild(td4);
tbody.appendChild(row);
}
</script>
</head>
<body>
Распределение доставки по позициям <br>
<table summary="" border="1" bordercolor="red" style="color:red;font-size:20px;" id="myTable" cellspacing="0">
<thead>
<tr>
<th>ЦЕНЫ<br> <input type="radio" name="disc" checked value="1" >Без НДС
<input type="radio" name="disc" value="1.18" >С НДС</th>
<th>ВВОДИМ ЦЕНУ</th>
<th>%</th>
<th>Результат без НДС</th>
</tr>
</thead>
<tbody>
<tr>
<td width="250">Укажите стоимость доставки</td>
<td><input type="text" style="color:red;font-size:20px;" placeholder="ДОСТАВКА" size="15" maxlength="15"></td>
<td align="center" width="50"></td>
<td align="left" width="100"></td>
</tr>
<tr>
<td align="right">Цена =</td>
<td><input type="text" style="color:red;font-size:20px;" placeholder="ВВОДИМ ЦЕНУ" size="15" maxlength="15"> </td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<input type="button" value="Добавить строку" href="javascript://" onclick="addRow('myTable');return false;">
</body>
</html>
Получилось так. |
если доставка = 0 или не указана
а цена введена то не получается результат с разными радиокнопками получается h = a[0] * e / 100 / koef + k, h = k исправил h = (a[0] * e / 100 + k)/koef, |
UJKJDF,
сначала продумать алгоритм, сделать описание, потом кодить. мысли вслух ... |
нашел как добавлять строки в таблице
возник вопрос как добавить ячейку "input" в TD var td2 = document.createElement("TD") var td3 = document.createElement("input") получается отдельно от таблицы. |
|
| Часовой пояс GMT +3, время: 09:15. |