Tags:

สมมุติว่าผมมีฟอร์มกรอกข้อมูลเป็น

อายุ (age)

น้ำหนัก (wt)

ส่วนสูง (ht)

เพศ (gender)

ผมอาศัย serializeArray() ของ JQuery อ่านข้อมูลออกมาเป็น JSON แต่ผมจะเขียนแยกเป็น 2 function คือ function สำหรับอ่านฟอร์ม แล้วแปลงเป็น var และ function ที่จะนำข้อมูลจาก var ไปประมวลต่อ

ถ้าผมเขียน function ที่ 1 ที่เอาไว้อ่านฟอร์มแบบนี้

function getformVal() {

var a01 = $("form").serializeArray();

var ttemp = "var "+a01[0].name+" = " + a01[0].value; // *1

eval(ttemp); //

return xxxx;
}

ตัว function ที่ 2 ก็จะเขียนแบบนี้

function calBMI() {

getformVal();

var BMI = wt/(htht10000);

...
}

ปัญหาคือ ถ้าเขียนแบบนี้จริงๆ var ใน *1 จะไม่ถูกใช้ใน function calBMI ใช่ไหมครับ

แต่ถ้าผมเขียนใน function getformVal() ว่าให้ return a01 เลย ผมก็ต้องยก code ใน *1 ไปใส่ใน function calBMI หรือ ในทุกๆ function ที่จะเรียกใช้ getformVal สิครับ

ผมควรจะแก้ code อย่างไรดี เพื่อให้ใช้งานได้ซ้ำๆ กันมากที่สุด

Get latest news from Blognone
By: PaPaSEK
ContributorAndroidWindowsIn Love
on 13 December 2011 - 23:03 #363815
PaPaSEK's picture

ผมงงครับ calBMI เรียกใช้ getformVal แต่ก็ไม่ได้รับค่าที่ return มาไปทำอะไรเลย แล้วจะใช้งานซ้ำๆ ไปเพื่ออะไรครับ

ผมแนะนำว่าถ้าจะถามคงต้องลง code เต็มๆ ครับ ถ้ากลัวว่าจะรู็ source ก็คงต้องอธิบาย concept ให้ละเอียดกว่านี้ เพราะ concept ก็ยังไม่เคลียร์

แต่เบื้องต้นผมแนะนำให้ทำความเข้าใจเรื่อง Closure ใน JavaScript ก่อนจะดีมากๆ ครับ


function a(){
  var aa = "sek";
  window.b = function(){
    alert(aa);
  };
}
a();
b();

หวังว่าจะช่วยจุดประกายอะไรได้บ้างครับ

By: JavaDevil
iPhoneUbuntuIn Love
on 14 December 2011 - 00:32 #363846

จริงๆไม่จำเป็นต้องทำ การ eval ใหม่ก็ได้นะครับ

ประกาศ ตัวข้อมูลเป็น Global scope แล้วเก็บเป็น JSON เลย

คุณรู้ใช่ไหมครับว่า JSON เป็น Object สำหรับเก็บข้อมุลของ JavaScript คุณก็เอาการอ้างอิงข้อมูลไปคำนวนในฟังชั่นต่างๆเลย

By: Nozomi
ContributorWindows PhoneAndroidSymbian
on 14 December 2011 - 00:38 #363849
Nozomi's picture

แหะๆ คือไม่ได้จะกั๊กอะไรเลยครับ ... ผมเพิ่งคิดได้ตะกี้เอง ผมอาจอธิบายไม่เคลียร์เอง งั้นเอาใหม่นะครับ

เรื่องของเรื่องคือ ผมมีเพจที่ต้องรับข้อมูลจาก form จำนวนมาก เดิมผมใช้วิธีเขียน loop เพื่ออ่านข้อมูลจากฟอร์มแล้วก็สร้าง var ชื่อเหมือนฟอร์ม เพื่อนำไปใช้ต่อ ซึ่ง ต้องเขียน loop ใหม่ในทุกๆ function ที่จะใช้งาน เลยรู้สึกว่ามันซ้ำซ้อน เลยอยากจะทำ function get formVal ที่จะเอาไว้อ่านข้อมูลจาก form แล้วเปลี่ยนให้เป็น var ทั้งหมด แล้วเรียกใช้งานซ้ำๆ ได้ครับ ซึ่งไอ้คำสั่ง serializeArray มันก็รองรับส่วนนี้

แต่ถ้าผมส่ง JSON ที่ได้จาก serializeArray ไปที่ function ที่จะคำนวณ ผมก็จะต้องเขียน code แปลงกลับเป็น var อีกที่แต่ละ function เช่น function calBMI (ไม่รู้ว่า งง หรือป่าว) ถ้าแบบนั้นผมไม่รู้จะทำยังไงดี ให้มันเหลือ code ที่ต้องเขียนซ้ำๆ ให้น้อยๆ ครับ

มีคำแนะนำอย่างอื่นเพิ่มเติม หรือตัวอย่างก็ได้ครับ ให้แนวกว้างๆ ก็พอ ผมลองเองได้ครับ

By: Nozomi
ContributorWindows PhoneAndroidSymbian
on 14 December 2011 - 01:15 #363857
Nozomi's picture

ผมแก้ไขปัญหาได้ละครับ มันเกิดจากผมทิ้งการเขียนโปรแกรมไปนานเอง เลยลืมๆ มึนๆ ครับ ทำตามที่คุณ JavaDevil บอกไว้ก็จบเรื่องเหมือนกันครับ แหะๆ

ขอบคุณทั้งสองท่านมากๆ ครับ