Javascript += เทียบเท่า?

รหัสของฉันเป็นฟังก์ชันง่ายๆ ที่ตรวจสอบว่ามีการกดปุ่มตัวเลือกใด และเพิ่มค่าของปุ่มตัวเลือกนั้นใน var input = 0; ของฉัน อย่างไรก็ตาม ฉันรู้ว่าฉันกำลังทำอะไรผิดในขณะที่มันใช้งานได้ แต่ผลลัพธ์กลับผิด เมื่อหนึ่งในคำสั่ง if เป็นจริง แทนที่จะให้ input(0) ตอนนี้เท่ากับตัวมันเองบวกด้วยค่าใหม่ของ getElementById("small").value มันจะพิมพ์ออกมา 010 ตรงข้ามกับตอนนี้ 10

ฉันรู้ว่าใน Java มีแบบแผนคล้ายกับ input += getElementById("small").value; แต่ดูเหมือนว่าจะไม่ทำงาน อย่างที่คุณเห็นในตัวอย่างของฉันด้านล่าง ฉันลองใช้ทางเลือกอื่นของ input = input + /*code*/; แต่ก็ยังไม่มีโชค

ฉันยังใหม่กับ JavaScript แต่คุ้นเคยกับ Java มาก ฉันคิดว่าฉันใช้ไวยากรณ์ผิดที่นี่ แต่การค้นหาใน Google ทั้งหมดล้มเหลว

function calculate()
{
    var input = 0;
    if (document.getElementById("small").checked) 
    {
        input = input + document.getElementById("small").value;
    }
    else if (document.getElementById("medium").checked)
    {
        input = input + document.getElementById("medium").value;
    }
    else if (document.getElementById("large").checked)
    {
        input = input + document.getElementById("large").value;
    }
    else
    {
        alert("failed");
    }

    document.getElementById("outar").innerHTML = input;
}

person SenjuXo    schedule 11.11.2015    source แหล่งที่มา
comment
คุณต้อง parseInt(value) เพื่อแปลงเป็นจำนวนเต็มแทนที่จะเป็นค่าข้อความเมื่อดึงค่าตัวเลขจาก dom   -  person David    schedule 11.11.2015
comment
ขอบคุณมากทุกคน!   -  person SenjuXo    schedule 11.11.2015


คำตอบ (6)


คุณกำลังพยายามคำนวณด้วยสตริง คุณต้องใช้ parseInt() รอบนิพจน์ document.getElementById("....").value แต่ละรายการของคุณ เนื่องจากคุณสมบัติ .value เป็นสตริง

ตัวอย่าง:

input += parseInt(document.getElementById("small").value);
person elixenide    schedule 11.11.2015
comment
อ่า! มันสมเหตุสมผลกว่ามาก ฉันกำลังดูประเภทการส่งคืนของ .value และพยายามทำความเข้าใจว่าจะแยกวิเคราะห์อย่างไร Parse มีทุกประเภทหรือไม่? parseDouble/Int/Float ฯลฯ? - person SenjuXo; 11.11.2015
comment
@SenjuXo แค่ parseInt และ parseFloat; JavaScript ไม่มี (เนทิฟ) parseDouble ดูคำตอบนี้: stackoverflow.com/a/21278297/2057919 - person elixenide; 11.11.2015

ค่าของคุณไม่ใช่ตัวเลขตามค่าเริ่มต้น แต่เป็นสตริง คุณต้องแยกวิเคราะห์ก่อน:

input += parseInt(document.getElementById("large").value);
person jvecsei    schedule 11.11.2015

คุณสามารถเพิ่มสัญลักษณ์ + เพิ่มเติมก่อนค่าสตริงเพื่อแปลงเป็นตัวเลข:

input += +document.getElementById("large").value;
person Denys Krasnoshchok    schedule 11.11.2015

คุณต้องแปลง .value เป็นตัวเลขเป็นจำนวนเต็มหรือทศนิยมด้วย parseInt หรือ parseFloat .value เป็นสตริง

person Daniel A. White    schedule 11.11.2015

Javascript เป็นภาษาที่พิมพ์แบบไดนามิก ไม่ใช่พิมพ์คงที่เหมือน Java document.getElementById("small").value ส่งคืนสตริงที่ต้องแปลงเป็น int ด้วย parseInt()

โฮ [e นั่นช่วยได้ :)

person gk0    schedule 11.11.2015

คุณยังสามารถอ้างถึง link- นี้

ค่าที่ส่งคืนจากค่าคือสตริง คุณต้องแปลงเป็น int ก่อนที่จะดำเนินการทางคณิตศาสตร์ใดๆ

JavaScript เป็นภาษาที่พิมพ์แบบไดนามิก ไม่ใช่พิมพ์แบบคงที่เช่น Java

ค่าส่งคืน: สตริงที่แสดงถึงค่าของฟิลด์ข้อความ

person RajSharma    schedule 11.11.2015