ต่อไปนี้อาจเป็นประโยชน์ในแง่ทั่วไป
ครั้งแรก, 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;