Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 13:02 06.07.25 
Компютри и Интернет
   >> WEB Дизайн и HTML
*Кратък преглед

Тема Javascript:Пресмятане на стойности от клеткинови  
Автор Nebesen1 (stubborn)
Публикувано19.01.07 15:12



Здравейте
Опитвам се да направя следното нещо - елементарна таблица с продукти и цените им даречем 5 реда. На 6тия ред се пресмята общата стойност на продуктите, като цените им може да се променят и при промяна, да се пресмята новата сума. Съвсем нов съм в джаваскрипт, но засега нещата изглеждат така :

В отговор на:


<script type="text/javascript">
function calculate()
{
sum=0;
i=0;
while(document.getElementById(i).value.length!=0)
{
val=document.getElementById(i).value;
sum=sum+parseInt(val);
i=i+1;
}
document.getElementById("sum").innerHTML=sum;
}
</script>



В отговор на:


$query=mysql_query("SELECT * FROM products WHERE system='$system_id'");
echo "<form name=myform><table id=tableid border=1 cellpadding=0 cellspacing=0 width=50%><tr>
<td align=center width=50%><b>Product</b></td>
<td align=center width=50%><b>Price</b></td></tr>";

for($i=0; $i<mysql_num_rows($query); $i++)
{
$product_name=mysql_result($sql, $i, "ime");
$bez_dds=mysql_result($sql, $i, "bez_dds");

echo "<tr>
<td align=center>$product_name</td>
<td align=center><input type=text id=$i onkeyup=calculate()></td>
</tr>";
}
echo "<tr>
<td align=center><b>Sum:</b></td>
<td id=sum align=center></td></tr>
</table></form>";




Така това принципно работи, но с няколко проблема:
1)Ако задам <input type=text id=$i onkeyup=calculate() VALUE=$bez_dds> не пресмята нищо. Как мога хем да задам дефолт стойност, хем да мога да я пресмятам при промяна с джаваскрипта ?
2)Пресмята се стойността на всички полета с изключение на последното. Последното поле просто не се включва в общата сума. Прегледах няколко пъти циклите, но не виждам къде може да е проблема. Някакви идеи ?

Благодаря предварително.

Just do it

Тема Re: Javascript:Пресмятане на стойности от клеткинови [re: Nebesen1]  
Автор dimodi (...)
Публикувано19.01.07 22:09



Здрасти,

Тъй като PHP-то няма отношение към проблема ти, вместо него можеше да дадеш готов HTML, който хората да гледат/ползват.

Иначе ето един вариант от мен, ама имай предвид, че не работи под IE5, заради toFixed() метода. Ако го махнеш, ще работи, но няма да имаш винаги два знака след десетичната точка. Твоят вариант работеше само с цели числа, докато този може и с десетични дроби.

Една особеност е, че трябва предварително да имаш Javascript масив с ID-тата на input-ите. Този масив можеш да си го построиш с PHP, като имаш резултата от заявката към базата. Друг вариант е да си ги взимаш ID-тата с Javascript след като страницата се зареди, ама лично аз не знам как става точно.

И накрая, да знаеш, че id и name атрибутите не могат да започват с цифра, трябва с буква.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xml:lang="bg" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<meta http-equiv="content-language" content="bg" />
<title>JS Calculate</title>
<script type="text/javascript">
// <![CDATA[
var productIds = new Array('p1', 'p2', 'p3');
var sum;
function calc()
{
sum = 0;
for (j = 0; j < productIds.length; j++)
{
if (parseInt(document.getElementById(productIds[j]).value) > 0)
{
sum += parseFloat(document.getElementById(productIds[j]).value);
}
}
document.getElementById('psum').innerHTML = sum.toFixed(2) + ' лв.';
}
// ]]>
</script>
</head>
<body>
<table summary="продукти и цени">
<caption>Продукти и цени</caption>
<thead><tr><th>Продукт</th><th>Цена без ДДС</th></tr></thead>
<tbody>
<tr><td>Чушки</td><td><input type="text" id="p1" name="p1" size="4" value="1.40" alt="Чушки"
onkeyup="javascript:calc();" /> лв.</td></tr>
<tr><td>Домати</td><td><input type="text" id="p2" name="p2" size="4" value="2.40" alt="Домати"
onkeyup="javascript:calc();" /> лв.</td></tr>
<tr><td>Сирене</td><td><input type="text" id="p3" name="p3" size="4" value="5.50" alt="Сирене"
onkeyup="javascript:calc();" /> лв.</td></tr>
</tbody>
<tfoot><tr><th>Общо</th><th id="psum">9.30 лв.</th></tr></tfoot>
</table>
</body>
</html>


Редактирано от dimodi на 19.01.07 22:12.



Тема Re: Javascript:Пресмятане на стойности от клетки [re: dimodi]  
Автор Nebesen1 (stubborn)
Публикувано19.01.07 23:14



Първо искам да ти благодаря, защото не бях сигурен дали ще разбереш какво точно имам в предвид. Разгледах подробно кода ти и го интегрирах в моя (целия код е с повечко пхп). Всичко върви идеално, с изключение на проблема с масива.

Добре със създаването на масива в пхп няма никакъв проблем, но след като го създам в цикъла, как да взема стойностите с джаваскрипта ?
Още нещо което забелязах е, че не смята стойности от рода на 0.5. Предполагам, че проблема е някъде тук if (parseInt(document.getElementById(productIds[j]).value) > 0), но както казах, сега навлизам в джаваскрипта.

Благодаря още веднъж.

Just do it

Редактирано от Nebesen1 на 19.01.07 23:30.



Тема Re: Javascript:Пресмятане на стойности от клеткинови [re: Nebesen1]  
Автор dimodi (...)
Публикувано19.01.07 23:42



За 0.5 - нека ">" в реда, който си ми копирал, да стане >= , не съм тествал, но сигурно ще стане.

Другият вариант е да замениш parseInt с parseFloat, аз съм го забравил така, щото първо ползвах него.

Въпросът за масива не го разбрах много, но предполагам питаш как да направиш това:


<?php
$query=mysql_query("SELECT * FROM products WHERE system='$system_id'");

for($i=0; $i<mysql_num_rows($query); $i++)
{
// ....
$array[] = " 'p" . $i . "'";
// ....
}

$jsArrayIDs = implode(', ', $array);

echo '<script type="text/javascript">var productIds = new Array(' . $jsArrayIDs . ');</script>';

?>




Тема Re: Javascript:Пресмятане на стойности от клеткинови [re: dimodi]  
Автор Nebesen1 (stubborn)
Публикувано20.01.07 00:20



Стойностите между 0 и 1 са добре вече, мерси.

За масива - нещо не се получава.
В хеад-а имам веднъж дефиниран тестов масив със същото име, а след това при изкарване на резултата в бодито се създава нов масив. В пхп-то с масива всичко е наред и с
echo '<script type="text/javascript">var productIds=new Array(' . $jsArrayIDs . ');</script>';
изглежда всичко е наред, тъй като в сорса вади стойностите. Пробвах да махна масива в хеад-а, но функцията не се изпълнява. Може би трябва да се дефинира масива в хеад-а, а после да се пълни със стойностите от бодито ? Как се пълни масив в джаваскрипт ? Сега ще се поразровя из нета ...
Пробвах така :
head - var productIds = new Array();
body - echo '<script type="text/javascript">productIds=Array.push(' . $jsArrayIDs . ');</script>';
но няма напредък.

Идея имаш ли ?

Just do it<P ID="edit"><FONT class="small"><EM>Редактирано от Nebesen1 на 20.01.07 00:24.</EM></FONT></P><P ID="edit"><FONT class="small"><EM>Редактирано от Nebesen1 на 20.01.07 00:25.</EM></FONT></P>

Редактирано от Nebesen1 на 20.01.07 00:30.



Тема Ъм...нови [re: Nebesen1]  
Автор KoтapakътнaШpьoдинrepМодератор (bloody furious)
Публикувано20.01.07 01:15



пропускаш нещо... Какво ти пречи да сложиш дефинирането на масива в главата?



There are three determined states the cat could be in: Alive, Dead, and Bloody Furious.

Тема Re: Ъм...нови [re: KoтapakътнaШpьoдинre]  
Автор Nebesen1 (stubborn)
Публикувано20.01.07 03:05



Пробвах, но стана една мноооого голяма каша и си викам - трябва да има по-лесен начин. Направих го, като предавам броя на продуктите по ГЕТ и после :

В отговор на:

<script type="text/javascript">
search = window.location.href.substr( window.location.href.indexOf( "&count=" ) + 1 )
count=search.substr(6);
var sum;
function calc()
{
sum = 0;
for (j = 1; j < count; j++)
{
if (parseInt(document.getElementById('p'+j).value) >= 0)
{
sum += parseFloat(document.getElementById('p'+j).value);
}
}
document.getElementById('psum').innerHTML = sum.toFixed(2) + ' &#235;&#226;.';
}
</script>




Сега всичко върви идеално. Благодаря на всички за отделеното време.

Just do it


*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.