Jump to content
  • 0

Плюс 4 процента к итоговой сумме


rus
 Share

Question

Подтолкните в нужном направлении, верно ли я делаю?

исходная ф-ция:


<script>
<!--
function submitForm(val) {
if(val != 'Y')
document.getElementById('confirmorder').value = 'N';
var orderForm = document.getElementById('ORDER_FORM_ID_NEW');
jsAjaxUtil.InsertFormDataToNode(orderForm, 'order_form_div', false);
orderForm.submit();
return true;
}
//-->
</script>

ну и то что я пытаюсь так сказать сделать:


<script>
<!--
function submitForm(val) {
if(val != 'Y')
document.getElementById('confirmorder').value = 'N';
var person_legal = document.getElementById('PERSON_TYPE_2');
var sum = document.getElementById('sum_product');
var without_nds = document.getElementById('sum_without_nds');
var nds = document.getElementById('sum_nds');
var total_sum = document.getElementById('sum_total_product');
if(person_legal.checked == true){
sum = sum*1.04;
without_nds = sum*1.04;
nds = sum*1.04;
total_sum = sum*1.04;
}
var orderForm = document.getElementById('ORDER_FORM_ID_NEW');
jsAjaxUtil.InsertFormDataToNode(orderForm, 'order_form_div', false);
orderForm.submit();
return true;
}
//-->
</script>

нужно приплюсовать к итоговой сумме 4% в зависимости от того нажат ли радиобаттон person_legal.

ну и html:


<input type="radio" onclick="submitForm()" value="2" name="PERSON_TYPE" id="PERSON_TYPE_2">

<p id="sum">79316 руб</p>
<p id="without_nds">67217 руб</p>
<p id="nds">12099 руб</p>
<p id="total_sum">79316 руб</p>

js не знаю совершенно :)

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

не, не, не... в визуальном представлении выглядет так:

Название | Цена | НДС | Кол-во

Phaser 6360DX | 79316 руб | 18% | 1(штук)

Товаров на: - 67217 руб

НДС: - 12099 руб

Итого: - 79316 руб

1 и 4 - это одно и тоже, но при этом я же не могу им один и тот же id поставить правильно?

поэтому в html будет так:


<p id="sum">79316 руб</p>
<p id="without_nds">67217 руб</p>
<p id="nds">12099 руб</p>
<p id="total_sum">79316 руб</p>

id разные, сумма одна. просто это стандартное представление данных и тут уж ничего не поделаешь.

UPD: попробовал немного переделать, но че-то не считает:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title></title>
<script>
<!--
function submitForm() {
var valuta =' руб.';
var person_legal = document.getElementById('PERSON_TYPE_2');
var sum = document.getElementById('sum_product');
var without_nds = document.getElementById('sum_without_nds');
var nds = document.getElementById('sum_nds');
var total_sum = document.getElementById('sum_total_product');
if(person_legal.checked == true){
document.getElementById('sum').innerHTML = sum*1.04 + valuta;
document.getElementById('without_nds').innerHTML = without_nds*1.04 + valuta;
document.getElementById('nds').innerHTML = nds*1.04 + valuta;
document.getElementById('total_sum').innerHTML = total_sum*1.04 + valuta;
}
}
//-->
</script>
</head>
<body>
<form action="" method="post">
<input type="radio" onclick="submitForm()" value="2" name="PERSON_TYPE" id="PERSON_TYPE_2">
<p id="sum_product">79316</p>
<p id="sum_without_nds">67217</p>
<p id="sum_nds">12099</p>
<p id="sum_total_product">79316</p>
</form>
</body>
</html>

Link to comment
Share on other sites

  • 0

Ничо не понял... Вот у тебя:


var sum = 100; // допустим

if(person_legal.checked == true){
sum = sum*1.04; // тут уже не 100, а 104
without_nds = sum*1.04; // тут уже не 104, а 118.16
nds = sum*1.04; // тут тоже
total_sum = sum*1.04; // тут тоже
}

Link to comment
Share on other sites

  • 0

смотри, из каждого:


<p id="sum_product">79316</p>
<p id="sum_without_nds">67217</p>
<p id="sum_nds">12099</p>
<p id="sum_total_product">79316</p>

нужно получить в ф-цию то, что у них уже есть на данный момент, а по событию onclick(); умножить каждое из полученных на 1.04 и вернуть уже перемноженным, т.е. вернуть плюс 4% каждому тегу... не знаю как еще объяснить :)

Тот код, который самый первый, я просто там немного не правильно написал, чем наверное и ввел тебя в заблуждение :)

UPD: выходит что я просто не могу получить данные из тега <p> путем document.getElementById('sum_product'); ?

вот полностью рабочий код:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title></title>
<script>
<!--
function submitForm() {
var valuta =' руб.';
var person_legal = document.getElementById('PERSON_TYPE_2');
var sum = 79316;
var without_nds = 67217;
var nds = 12099;
var total_sum = 79316;
if(person_legal.checked == true){
document.getElementById('sum_product').innerHTML = Math.round(sum*1.04) + valuta;
document.getElementById('sum_without_nds').innerHTML = Math.round(without_nds*1.04) + valuta;
document.getElementById('sum_nds').innerHTML = Math.round(nds*1.04) + valuta;
document.getElementById('sum_total_product').innerHTML = Math.round(total_sum*1.04) + valuta;
}
}
//-->
</script>
</head>
<body>
<form action="" method="post">
<input type="radio" onclick="submitForm()" value="2" name="PERSON_TYPE" id="PERSON_TYPE_2">
<p id="sum_product">79316</p>
<p id="sum_without_nds">67217</p>
<p id="sum_nds">12099</p>
<p id="sum_total_product">79316</p>
</form>
</body>
</html>

Link to comment
Share on other sites

  • 0


function addPercent(elem, percent) {
var form = typeof elem == 'string' ? document.getElementById(elem) : elem;
var fields = form.getElementsByTagName('p');

for (var i = 0; i < fields.length; i++) {
var field = fields[i];
var fieldValue = parseFloat(field.innerHTML);

fieldValue *= percent;
field.innerHTML = fieldValue;
}
}


<form action="" method="post">
<input type="radio" onclick="addPercent(this.form, 1.04); submitForm();" value="2" name="PERSON_TYPE" id="PERSON_TYPE_2">

<p id="sum_product">79316</p>
<p id="sum_without_nds">67217</p>
<p id="sum_nds">12099</p>
<p id="sum_total_product">79316</p>
</form>

Link to comment
Share on other sites

  • 0

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

2) я сделал вот так:


function submitForm() {
var valuta =' руб.';
var person_legal = document.getElementById('PERSON_TYPE_2');
var sum = document.getElementById('sum_product').innerHTML;
var without_nds = document.getElementById('sum_without_nds').innerHTML;
var nds = document.getElementById('sum_nds').innerHTML;
var total_sum = document.getElementById('sum_total_product').innerHTML;
if(person_legal.checked == true){
document.getElementById('sum_product').innerHTML = Math.round(sum*1.04) + valuta;
document.getElementById('sum_without_nds').innerHTML = Math.round(without_nds*1.04) + valuta;
document.getElementById('sum_nds').innerHTML = Math.round(nds*1.04) + valuta;
document.getElementById('sum_total_product').innerHTML = Math.round(total_sum*1.04) + valuta;
}
}


<form action="" method="post">
<input type="radio" onclick="submitForm()" value="2" name="PERSON_TYPE" id="PERSON_TYPE_2">
<p id="sum_product">79316</p>
<p id="sum_without_nds">67217</p>
<p id="sum_nds">12099</p>
<p id="sum_total_product">79316</p>
</form>

чем этот вариант плох?

Link to comment
Share on other sites

  • 0

Ну рубли добавить недолго. parseFloat() их отсечет. Твой вариант ничем не плох кроме того, что не очень универсален, т.е. если, допустим у тебя еще какое-нить поле добавится, или, скажем, придется сделать еще калькулятор, но с другими полями, то придется все переписывать, а у меня не придется (особенно если сюда - form.getElementsByTagName('p') - запилить переменную вместо "p").

Link to comment
Share on other sites

  • 0

form.getElementsByTagName('p')

а если в форме много этих тегов <p>? и в каждом могуть быть разные значения, как текст, так и цифры, так и текст с цифрами, а выполнить ф-цию нужно будет только для определенных <p>?

Link to comment
Share on other sites

  • 0

Назначить им всем класс и в цикле проверять нужен небе <p> или не нужен:


function addPercent(elem, percent) {
var form = typeof elem == 'string' ? document.getElementById(elem) : elem;
var fields = form.getElementsByTagName('p');

for (var i = 0; i < fields.length; i++) {
if (fields[i].className.indexOf('jsField') == -1) continue;

var field = fields[i];
var fieldValue = parseFloat(field.innerHTML);

fieldValue *= percent;
field.innerHTML = fieldValue;
}
}

Link to comment
Share on other sites

  • 0

indexOf() возвращает индекс вхождения строки, т.е. номер символа с которого начинается искомая строка, или возвращает -1 если искомая строка не найдена. continue прерывает текущую итерацию цикла.

Я на самом деле лоханулся, надо вот так писать:

if (fields[i].className.indexOf('jsField') == -1) continue;

или

if (fields[i].className.indexOf('jsField') < 0) continue;

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy