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

توضيح حول إستعمال setTimeout

محمود_سعداوي

السؤال

السلام عليكم.

في الكود التالي

let arr = ["ahmed","mohamed","mahmoud","ali","omar"]
const btn = document.querySelector('button')

function sayHello() {
    let i=0
    btn.addEventListener('click', ()=>{
        console.log(`Hello I'm ${arr[i]}`)
        i++
    })
}
setTimeout(sayHello,3000)

عندما أضغط على الزر تظهر الرسالة مباشرة و ليس بعد 3 ثواني.

الرجاء المساعدة و شكرا.

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

Recommended Posts

  • 0

في الشيفرة الحالية أنت تقوم بتأخير تنفيذ sayHello ل 3 ثواني، أي عملية إسناد مستمع النقر للزر هو من يتأخر،

  • اذا ضغط على الزر بعد تحديث الصفحة قبل مرور 3 ثواني لن يحصل استجابة لأنه حينها لا يوجد شيء اسمه click للزر

لاحقاً عند النقر على الزر سيتم تحقيق الاستجابة مباشرة للدالة callback وهي الطباعة و زيادة العداد i

التصحيح للبرنامج:

  • sayHello مسؤولة فقط عن الطباعة وزيادة i
  • عند النقر على الزر نستدعي setTimeout التي بدورها تستدعي sayHello بعد تأخير 3 ثواني
<!DOCTYPE html>
<html>

<body>



    <button id="demo"> btn </button>

    <script>
        let arr = ["ahmed", "mohamed", "mahmoud", "ali", "omar"]
        const btn = document.querySelector('button')

        let i = 0;
        function sayHello() {
            console.log(`Hello I'm ${arr[i]}`);
            i++;
            if (i == 4) i = 0;

        }
        btn.addEventListener('click', () => {
            setTimeout(sayHello, 3000);
            // sayHello();
        })
        setTimeout(sayHello, 3000);
    </script>

</body>

</html>

/****** مثال آخر *******/

لكي تجعل البرنامج يطبع قيمة الاسم بشكل مختلف كلما قام المستخدم بالنقر على الزر يمكنك تعديل البرنامج كالتالي:

  • نقوم بتعرف مستمع حدث النقر مباشرة
  • تعريف المتغير i خارج الدالة لكي لا يتم إسناد قيمة 0 لها كل مرة
  • نتأكد أن i لن تخرج من حدود المصفوفة
  • الدالة مسؤولة عن تغيير قيمة i
  • استخدمت setInterval ليتم تنفيذها بشكل متكرر كل 3 ثواني و تغيير رقم الشخص / الاسم
<!DOCTYPE html>
<html>

<body>

    <button id="demo"> btn </button>

    <script>
        let arr = ["ahmed1", "ahmed2", "ahmed3", "ahmed4", "ahmed5"]
        const btn = document.querySelector('button')
		let i = 0;
      
        btn.addEventListener('click', () => {
            console.log(`Hello I'm ${arr[i]}`)
        })

        
        function sayHelloToNextPerson() {
            i++
            if (i == 4) i = 0;
        }
        setInterval(sayHelloToNextPerson, 3000)
    </script>

</body>

</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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...