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

خطأ h1 not defined في كود جافاسكريبت

Mohamed Lotfi

السؤال

هل يمكن تفحص هاته الشيفرة والاشارة للخطأ، 

اريد ان يزداد رقم في العنوان كل مره يتم الضغط على الصورة

<body id="body">
    <h1 id="title"></h1>
    <p id="close" onclick="open1()">🙈</p>
    <p id="open" onclick="close1()">🙉</p>
    <style>
        p {
            font-size: 200px;
            margin: 10% 38%;
            -webkit-touch-callout: none;
            -webkit-user-select: none;
            -khtml-user-select: none;
            -moz-user-select: none;
            -ms-user-select: none;
            user-select: none;
        }
        
        #open {
            display: none;
            transition: all 10s;
        }
        
        #close {
            display: block;
            transition: all 10s;
        }
    </style>
    <script src="on click.js"></script>
</body>

جافاسكربت:

function open1() {
    var opened = document.getElementById("open"),
        closed = document.getElementById("close"),
        body = document.getElementById("body"),
        clicks = document.getElementById("title").innerHTML,
        clicks = 0;
    clicks += 1;
    opened.style.display = "block";
    closed.style.display = "none";
    h1.style.color = "white";
}

function close1() {
    var opened = document.getElementById("open"),
        closed = document.getElementById("close"),
        body = document.getElementById("body"),
        clicks = document.getElementById("title").innerHTML,
        clicks = 0;
    opened.style.display = "none";
    closed.style.display = "block";
    clicks += 1;
}

مرفق الملفات:

تم التعديل في بواسطة Adnane Kadri
اخراج الشيفرة وتحسين صياغة السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يمكنك أن تقوم بهذا الأمر من خلا عمل متغير عام global باسم counter وتقوم بزيادة قيمته عند الضغط على الأيقونة، بالشكل التالي

let counter = 0;	// نعرف متغير عام هنا

function open1() {
    var opened = document.getElementById("open"),
        closed = document.getElementById("close");

  	// نزيد القيمة في العنوان
    counter += 1;
    document.getElementById("title").innerHTML = counter;

    opened.style.display = "block";
    closed.style.display = "none";
}

function close1() {
    var opened = document.getElementById("open"),
        closed = document.getElementById("close");

    // نزيد القيمة في العنوان
    counter += 1;
    document.getElementById("title").innerHTML = counter;

    opened.style.display = "none";
    closed.style.display = "block";
}

وإذا أردت أن تقوم بتغير لون العنصر h1 من خلال JavaScript عليك أن تستعمل الكود التالي:

var h1 = document.getElementById("title");	// تحديد العنصر
h1.style.color = "white";	// تغير لونه

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

سبب الخطأ الذي يظهر لديك هو أنك تقوم مباشرة بتنفيذ المتغير h1 دون تعريفه أولا:

h1.style.color = "white"; // +++++++

فجافاسكربت تفترض أن تقوم بتعريفه ثم سيمكنك الوصول اليه، 

أفهم من ذلك أنك تريد الوصول إلى الترويسة بالمعرف title، يمكنك القيام بذلك عن طريق:

var opened = document.getElementById("open"),
    closed = document.getElementById("close"),
    body = document.getElementById("body"),
    title = document.getElementById("title"), // ++++++++++++++++
    
    
    
    title.style.color = "white"; // ++++++++++++++

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

سنحتاج بعد هذا تغيير المحتوى النصي للعنوان عند كل ضغطة، أو بعبارة أخرى عند كل استدعاء للدالة open1. لفعل ذلك سنحتاج تزويد 1 للمحتوى العددي للعنوان. وبنفس المنطق:

title.innerHTML = clicks;

ستلاحظ بعض التحسن ولكن ستحتاج هاته الفكرة تعديلا أكثر يتلخص في:

function open1() {
    var opened = document.getElementById("open"), 
        closed = document.getElementById("close"),
        body = document.getElementById("body"), // لا حاجة لتعريف هذا المتغير فنحن لا نحتاجه أصلا في هاته الدالة 
        title = document.getElementById("title"),
        clicks = document.getElementById("title").innerHTML || 0, // نقوم باسناد قيمة صفرية كافتراض ان لم يحمل العنوان أي عدد 
        clicks = 0; // لا حاجة لإعادة ضبط عددد النقرات للصفر كوننا نريد تتبع عدد النقرات
    clicks = parseInt(clicks) + 1; // لتجنب اعتبار الاعداد كسلاسل نصية نقوم بجمع المكافئ للقيمة العددية التي يخزنها العنوان 
    opened.style.display = "block";
    closed.style.display = "none";
    title.style.color = "black"; // من الطبيعي أن لا يكون لون النص في حالته النشطة ابيضا

    title.innerHTML = clicks;
}

النتيجة:

function open1() {
    var opened = document.getElementById("open"),
        closed = document.getElementById("close"),
        title = document.getElementById("title"),
        clicks = document.getElementById("title").innerHTML || 0;

    clicks = parseInt(clicks) + 1;
    opened.style.display = "block";
    closed.style.display = "none";
    title.style.color = "black";

    title.innerHTML = clicks; 
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...