اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

ملف index.js قمت بتضمينه بشكل سليم ولو قمت بكتابة:

console.log("Hello World");

ستجد أنّ الرسالة ظهرت في الكونسول، إذن يوجد مشكلة في الكود تمنع عمله بشكل صحيح.

لنقم بحل المشكلة الأولى وهي الضغط على الأرقام لا يظهر أيًا منها على شاشة الآلة الحاسبة، عليك تصحيح متغير prevlousOperator بتهيئته بقيمة null، وتصحيح خطأ في handleNumber لأنك تستخدم === الخاص بالمقارنة بدلاً من = لتعيين قيمة.

ثم إضافة تحويل runningTotal إلى نص باستخدام toString() عند عرضه، وإضافة استدعاء handleMath(symbol) وكلمة break في حالات العمليات الحسابية.

ثم تصحيح اسم متغير event في دالة الاستماع، لأنك كتبت even بدلاً من event:

console.log("Hello World");
let runningTotal = 0;
let buffer = "0";
let prevlousOperator = null;

const screen = document.querySelector('.screen')

function buttonClick(value){
    if(isNaN(value)){
        handleSymbol(value)
    }else{
        handleNumber(value)
    }
    screen.innerText = buffer;
}

function handleSymbol(symbol){
    switch(symbol){
        case 'C':
            buffer = "0";
            runningTotal = 0;
            break;
        case "=":
            if(prevlousOperator === null){
                return
            }
            flushOperation(parseInt(buffer));
            prevlousOperator = null;
            buffer = runningTotal.toString();
            runningTotal = 0;
            break;
        case "←" :
            if(buffer.length === 1){
                buffer = "0";
            }else{
                buffer = buffer.substring(0, buffer.length - 1);
            }
            break;
        case '+':
        case '-':
        case '×':
        case '÷':
            handleMath(symbol);
            break;
    }
}
 
function handleMath(symbol){
    if(buffer === '0'){
        return;
    }

    const inBudffer = parseInt(buffer);

    if(runningTotal === 0){
        runningTotal = inBudffer;
    }else{
        flushOperation(inBudffer);
    }
    prevlousOperator = symbol;
    buffer = '0';
}

function flushOperation(inBudffer){
    if(prevlousOperator === '+'){
        runningTotal += inBudffer;
    }else if(prevlousOperator === '-'){
        runningTotal -= inBudffer;
    }else if(prevlousOperator === '×'){
        runningTotal *= inBudffer;
    }else if(prevlousOperator === '÷'){
        runningTotal /= inBudffer;
    }
}

function handleNumber(numberString){
    if(buffer === "0"){
        buffer = numberString;
    }else{
        buffer += numberString;
    }
};


function init(){
    document.querySelector('.calc-buttons').addEventListener('click', function(event){
        buttonClick(event.target.innerText);
    })
}

init();

 

  • 0
نشر

إذا لاحظت في ال console ستجد أن الكود يعمل دون أى مشكلة ويتم تحميل الملف بشكل صحيح.

أما بخصوص عدم المنطق كما نريد فهذا بسبب وجود أخطأء لديك .

أولا في سطر 84 لاحظ أنك قمت بكتابة even ولكنك تستخدم في الدالة event لهذا يجب تعديلها إلى event هكذا :

document.querySelector('.calc-buttons').addEventListener('click' , function(event){

الآن في سطر 76 لاحظ أنك تستخدم === ولكن الصحيح هو علامة = واحدة لتعين القيمة هكذا :

buffer = numberString;
  • 0
نشر
بتاريخ 2 دقائق مضت قال Zen:

لقد قم بتصحيح الأخطاء لكن هناك خظئ لم اعلم اين هو عند ضغط على + - لا يعملون لكن الاحرف تعمل

من المفترض الآن أن الأزرار جميعها تعمل وهي الأرقام وحرف c للحذف وللسهم .

أما بخصوص + و - و × و ÷ فهما لن يعملوا لأنك لم تقم بكتابة المنطق الخاص بهم :

image.png.66ced4009046ad590dbcd1e5058c673f.png

لاحظ كيف أن الكود الخاص بهم فارغ. لذلك يجب عليك إنشاء المنطق الخاص بكل زر منهم.

وأيضا لاحظ أن زر = غير موجود في HTML.  

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...