ต่อไปนี้อาจเป็นประโยชน์ในแง่ทั่วไป
ครั้งแรก, HTML เขตข้อมูลฟอร์มจะถูก จำกัด ให้ข้อความ สิ่งนี้ใช้ได้กับกล่องข้อความโดยเฉพาะแม้ว่าคุณจะได้รับความเจ็บปวดเพื่อให้แน่ใจว่าค่าดูเหมือนเป็นตัวเลข
ข้อที่สองจาวาสคริปต์ดีกว่าหรือแย่กว่าทำให้โอเวอร์โหลด+มีความหมายสองตัว: เพิ่มตัวเลขและเชื่อมสตริงเข้าด้วยกัน มันมีการตั้งค่าสำหรับการเรียงต่อกันดังนั้นแม้การแสดงออกเช่น3+'4'จะได้รับการปฏิบัติต่อกัน
ประการที่สามจาวาสคริปต์จะพยายามเปลี่ยนประเภทแบบไดนามิกหากทำได้และหากจำเป็น ตัวอย่างเช่น'2'*'3'จะเปลี่ยนทั้งสองประเภทเป็นตัวเลขเนื่องจากคุณไม่สามารถคูณสตริงได้ หากหนึ่งในนั้นไม่เข้ากันคุณจะได้รับNaNไม่ใช่ตัวเลข
ปัญหาของคุณเกิดขึ้นเนื่องจากข้อมูลที่มาจากแบบฟอร์มนั้นถือเป็นสตริงและ+จะเชื่อมโยงกันแทนที่จะเพิ่ม
เมื่ออ่านข้อมูลที่เป็นตัวเลขที่คาดคะเนจากแบบฟอร์มคุณควรส่งผ่านparseInt()หรือparseFloat()ขึ้นอยู่กับว่าคุณต้องการจำนวนเต็มหรือทศนิยม
โปรดทราบว่าฟังก์ชั่นไม่แปลงสตริงเป็นตัวเลขอย่างแท้จริง แต่จะแยกสตริงจากซ้ายไปขวาจนกว่าจะเป็นอักขระตัวเลขที่ไม่ถูกต้องหรือไปยังจุดสิ้นสุดและแปลงสิ่งที่ได้รับการยอมรับ ในกรณีของparseFloatที่มีหนึ่งจุดทศนิยม แต่ไม่สอง
สิ่งใดหลังจากหมายเลขที่ถูกต้องจะถูกละเว้นเพียงแค่ พวกเขาล้มเหลวหากสตริงไม่ได้เริ่มเป็นตัวเลข NaNจากนั้นคุณจะได้รับ
เทคนิควัตถุประสงค์ทั่วไปที่ดีสำหรับตัวเลขจากแบบฟอร์มเป็นดังนี้:
var data=parseInt(form.elements['data'].value); // or parseFloat
หากคุณพร้อมที่จะรวมสตริงที่ไม่ถูกต้องเป็น 0 คุณสามารถใช้:
var data=parseInt(form.elements['data'].value) || 0;