พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com | บล็อกอาหาร
Javascript development / การคำนวณค่า
pololike
Sat 5 Nov 2005 09:17:07

คือจะคำนวณค่าหาผลรวมของแต่ละ item คูณด้วย ราคาอ่ะค่ะ แล้วมันต้องวนรอบแสดงข้อมูลทั้งหมดออกมาก้อเลยต้องส่งค่า no มาเพื่อจะได้ดูว่ามันอยู่ที่ลำดับเท่าไหร่ แต่พอจะให้มันแสดงค่าที่คำนวณได้มันกลับฟ้องว่า document.form1.x undefine เราจะทำยังงัยค่ะให้เอาค่า no มาต่อสตริงให้มันเห็นว่าเป็นชื่อเดียวกันค่ะ

<script language="javascript" type="text/javascript">
function TotalUnit(qty,price,no) {
 var x="total_unit"+no
 total= qty * price
 document.form1.x.value=total
}
</script>

Administrator
Sat 5 Nov 2005 11:12:20
ตอนนี้ปัญหาของคุณ pololike ไม่ใช่ว่าต่อ string ไม่ได้ แต่ตอนนี้ค่าที่ต้องการยังไม่สามารถแสดงผลได้ ต้องให้ส่วนนั้นๆแสดงผลออกมาก่อนครับ เพื่อจะดูว่าค่าที่ได้นั้นถูกต้องหรือไม่

ไม่ทราบว่า item ที่ชื่อ x เป็น input ชนิดอะไรใน form ที่ชื่อ form1 หรือครับ ถ้าส่วนแสดงผลนี้ไม่ใช่ input item จะไม่สามารถอ้างอิงจาก form name ได้ครับ ส่วนที่อ้างอิงจาก form name ได้นั้นต้องเป็น input item เท่านั้นครับ เช่น <input, <select, <textarea ครับ

ส่วนถ้าส่วนที่ใช้แสดงผลเป็น <span>, <div> ลองดูตัวอย่างของคุณไก่ย่าง ได้ที่ ให้มันโชว์ข้อความเมื่อคลิ๊กที่รูป
ซึ่งผมได้อธิบายการทำงานของ javascript พร้อมตัวอย่างให้ดูแล้วด้วยครับ
pololike
pololike
Sat 5 Nov 2005 11:21:28

เป็น input ประเภท textbox แบบ readonly ค่ะ พอมันคำนวณได้ก็จะแสดงผลรวมออกมาโดยอัตโนมัติ

Administrator
Sat 5 Nov 2005 11:48:13
ลองตรวจสอบชื่อของ input นั้นๆดูครับว่าชื่อถูกต้องหรือไม่ครับ เพราะจากที่มีการแจ้งว่า undefine นั้นมี 2 สาเหตุครับคือ ไม่มี object ชื่อนี้ กับ object ชื่อนี้มีแต่มีมากกว่า 1 ลองตรวจสอบตรงนี้ดูก่อนนะครับ หรือไม่ก็เปลี่ยนเป็นดังตัวอย่างที่ผมอธิบายให้คุณไก่ย่างก็ได้ครับ 
pololike
Tue 8 Nov 2005 09:35:37

ลองทำเป็นแบบของคุณไก่ย่างแล้ว

function Unit(qty,price,no){
 total=qty*price
 if(document.all){
  eval("document.all."+no+".innerHTML='"+total+"'")
 }else{
  eval("document.getElementById(\""+no+\"").innerHTML="'"+total+"'")
 }
}

โดยเมื่อคีย์ตัวเลขลงไปจะคำนวณค่าให้

<input name="quantity<?=$i?>" type="text" class="textbox" id="quantity<?=$i?>" value="1" size="3"  onKeyup="Unit(this.value,<?=$result[5]?>,<?=$i?>Wink">

ช่วยดูให้อีกทีนะค่ะ

pololike
Tue 8 Nov 2005 10:13:46

ที่ต้องการทำมันประมาณเนี้ยอ่ะค่ะ แต่มันไม่ออกอ่ะค่ะ

<html>
<head>
<script language="javascript">
function display_name(obj,txt){
 if(document.all){
  eval("document.all."+obj+".innerHTML='"+txt+"'");
 }else{
  eval("document.getElementById(\"+obj+\").innerHTML='"+txt+"'");
 }
}
</script>
</head>
<body>
<? for($i=0;$i<5;$i++){ ?>
<span id="<?=$i?>"></span><br>
<input type="text" onKeyup="display_name('<?=$i?>',this.value)">
<? } ?>
</body>
</html>

Administrator
Tue 8 Nov 2005 13:51:29
ปัญหาแรกคือเมื่อ คำสั่ง eval ทำงานจะทำการแปรคำสั่งออกมาจะได้เป็น
document.all.0.innerHTML='ตัวเลข'
...
document.all.4.innerHTML='ตัวเลข'
ปัญหาคือ IE ไม่รองรับการตั้งชื่อ obj ที่ขึ้นต้นด้วยตัวเลยขได้ครับ

ส่วนในโค๊ดส่วนของ DOM นั้นคุณใส่ \ นำหน้า " (Double quote) นั้นจะทำให้คำสั่ง eval แปรออกมาเป็น
document.getElementById("+obj+").innerHTML='ข้อความ'
ซึ่ง browser จะไม่สามารถหา object ในชื่อดังกล่าวได้ครับ
ลองใช้โค๊ดนี้ดูครับ

<html>
<head>
<script language="javascript">
function display_name(obj,txt){
 if(document.all){
  eval("document.all."+obj+".innerHTML='"+txt+"'");
 }else{
  eval("document.getElementById('"+obj+"').innerHTML='"+txt+"'");
 }
}
</script>
</head>
<body>
<? for($i=0;$i<5;$i++){ ?>
<span id="<?="st".$i?>"></span><br>
<input type="text" onKeyup="display_name('<?="st".$i?>',this.value)">
<? } ?>
</body>
</html>
aa
aa
Tue 8 Nov 2005 14:46:08

ได้แล้วค่ะแต่ว่าตอนนี้มันมีปัญหาใหม่มาอีกแล้ว คืออยากจะถามว่าการทำเว็บไซต์เนี่ยเค้าจะเก็บค่าเอาไว้ใน temp แล้วค่อยหาผลรวมออกมาเหมือนการทำโปรแกรมอื่นๆหรือป่าวค่ะ แล้วถ้ามีเค้าต้องทำกันประมาณไหนเหรอค่ะช่วยบอกเด็กคนนี้ทีนะค่ะ

Administrator
Tue 8 Nov 2005 15:56:49
การทำเว็บไซท์ก็มีการ handle ข้อมูลที่มีการใช้งานหลายแบบครับ ซึ่งส่วนตัวแล้วก็แล้วแต่ว่างานนั้นๆเป็นแบบไหนครับ
เข้าใจว่าคุณกำลังต้องการทำ shopping cart หรือเปล่าครับ ถ้าใช่
โดยปกติแล้ววิธีที่ง่ายที่สุดของ php shopping cart ก็เก็บไว้ใน session ครับเมื่อต้องการคำนวนก็เรียกออกมาคำนวนครับ
แต่วิธีที่เสถียรกว่าคือเก็บข้อมูลนั้นๆไว้ใน database ครับ โดยต้องออกแบบ database เพื่อการเก็บข้อมูลเหล่านี้ไว้ด้วยครับว่าต้องการเก็บแบบไหน การเรียกออกมาคำนวนจะทำได้ง่ายและเร็วที่สุดครับ

ถ้าไม่ใช่ shopping cart ต้องขอโทษด้วยครับ การเก็บค่าไว้ ก็มีอีกส่วนคือ cookie ครับแต่ไม่แนะนำให้ใช้ cookie กับระบบที่เกี่ยวกับการเงินนะครับ เพราะว่า user สามารถแก้ไขได้ตามต้องการครับ
pololike
pololike
Wed 9 Nov 2005 08:45:06

ถ้างั้นช่วยหน่อยนะค่ะ ตอนนี้กำลังทำ shopping cart อยู่ ในหน้า order list มันจะมีช่อง input เอาไว้ให้ลูกค้ากรอกจำนวนที่ต้องการ เมื่อกรอกเสร็จก็จะมีการไปดึงฟังก์ชันในการรวมค่าออกมาดังนี้

function TotalUnit(qty,price,no){
 total=qty*price
 if(document.all){
  eval("document.all."+no+".innerHTML='"+total+"'")
 }else{
  eval("document.getElementById(\"+no+\").innerHTML='"+total+"'")
 }
}

ค่าที่รวมได้ก็จะแสดงในส่วนของ span id ที่กำหนด แล้วเราต้องการนำค่าที่แสดงอยู่ใน span id ที่กำหนดเอาไว้มาหาผลรวมอีกทีนึงเราจะอ้างอิงถึงได้อย่างได้เหรอค่ะ ช่วยหน่อยนะค่ะ

Administrator
Wed 9 Nov 2005 12:30:41
<html>
<head>
<script language="javascript">
var total;
function subtotal(obj,qty,price){
 sub_total=qty*price
 if(document.all){
  eval("document.all."+obj+".innerHTML='"+sub_total+"'");
 }else{
  eval("document.getElementById('"+obj+"').innerHTML='"+sub_total+"'");
 }
 total += sub_total;
}

function display_total(){
  if(document.all){
  document.all.total_price.innerHTML = total;
 }else{
  document.getElementById("total_price").innerHTML = total;
 }
}
</script>
</head>
<body>
<input type="text" name="item1" onkeyup="subtotal('sub_item1',this.value,20)"><span id="sub_item1"></span>

<input type="text" name="item2" onkeyup="subtotal('sub_item2',this.value,20)"><span id="sub_item2"></span>

<input type="text" name="item1" onkeyup="subtotal('sub_item3',this.value,20)"><span id="sub_item3"></span>

<span id="total_price"></span>
</body>
</html>
ฟฟ
ฟฟ
Wed 9 Nov 2005 14:29:30

ทำไมผลรวมของ total ถึงไม่โชว์อ่ะ

Administrator
Wed 9 Nov 2005 19:47:33
ขอโทษที่ครับลืมเรียกใช้งาน display_total()

<script language="javascript">
var total;
function subtotal(obj,qty,price){
 sub_total=qty*price
 if(document.all){
  eval("document.all."+obj+".innerHTML='"+sub_total+"'");
 }else{
  eval("document.getElementById('"+obj+"').innerHTML='"+sub_total+"'");
 }
 total += sub_total;
 display_total();
}

function display_total(){
  if(document.all){
  document.all.total_price.innerHTML = total;
 }else{
  document.getElementById("total_price").innerHTML = total;
 }
}
</script>
Reply
Name:
E-mail:
Home | Services | Forum | Classified | Directories | Support | Contact
ATOM feed RSS 0.9 feed RSS 1.0 feed RSS 2.0 feed
Copyright © 2005 - 2007 Modoeye.com, All Rights Reserved.
Disclaimer | Privacy policy | Term of Use | Term of Services
Valid XHTML Valid CSS! PHP: Hypertext Preprocessor MySQL database Apache Powered! FreeBSD Power to serve
Modoeye Sitemap Client login