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

الفهم الصحيح لاستخدام Event Listeners والـ Callback Functions في JavaScript

Bandar Abuseada

السؤال

<button onclick="removeHandler()">Remove</button>

<p id="demo"></p>

<script>
document.addEventListener("mousemove", myFunction);

function myFunction() {
  document.getElementById("demo").innerHTML = Math.random();
}

function removeHandler() {
  document.removeEventListener("mousemove", myFunction);
}
</script>

 

في هذا المثال قمت بستعمال عمليات الاسترجاع callback funcation  وعند تحريك المواس يتولد رقم عشوائي السؤال ليس هنا السؤال هو 

document.addEventListener("mousemove", document.getElementById("demo").innerHTML = Math.random());

عند تنفيذ هذا الامر بدون callback (عمليات الاسترجاع) ينفذ الامر مره واحده عند التشغيل اما عند استعمال callbak ينفذ طليه تحريك المؤشر الماوس على الشاشه هل هذا يعني ان الدوال تعمل loob على الكود ام ماذا ولماذا تم تنفيذ الامر مره واحده؟ في

document.addEventListener("mousemove", document.getElementById("demo").innerHTML = Math.random());

const myTimeout = setTimeout(document.getElementById("demo").innerHTML = "Happy day!", 5000);  و ايضا تم تنفيذ هذا الامر مباشره دون انتضار 5 secnd ?

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال ونص السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

هناك خلط في الفهم بين كيفية استخدام وتسجيل الحدث (event listener) وكيفية تعيين دالة كولباك (callback function).

عند استخدام addEventListener مثلما هو موضح في المثال الأول:

document.addEventListener("mousemove", myFunction);

هذا يعني أننا نقوم بتعيين دالة myFunction كدالة استجابة لحدث "mousemove" ،وتلك الدالة ستُستدعى في كل مرة يتم فيها تحريك الماوس على الشاشة، وسيتم تنفيذ الكود الموجود في داخل الدالة في كل مرة.

أما الشيء الذي قمت بتجربته:

document.addEventListener("mousemove", document.getElementById("demo").innerHTML = Math.random());

هناك خطأ في الاستخدام، لأنك تقوم بتعيين نتيجة تقييم تعبير document.getElementById("demo").innerHTML = Math.random() كدالة استجابة للحدث "mousemove"، وذلك ليس هو الهدف المطلوب.

بالنسبة للجزء الثاني من السؤال، عند استخدام setTimeout، يجب تمرير دالة كولباك كمعامل أول والوقت الذي يجب أن تنتظره كمعامل ثاني. لذلك، يجب استخدامه بهذه الطريقة:

const myTimeout = setTimeout(function() {
  document.getElementById("demo").innerHTML = "Happy day!";
}, 5000);

وذلك سيؤدي إلى تغيير نص العنصر برقم عشوائي بعد مرور 5 ثواني من تنفيذ السكريبت.

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

  • 0
بتاريخ 2 ساعة قال Mustafa Suleiman:

هناك خلط في الفهم بين كيفية استخدام وتسجيل الحدث (event listener) وكيفية تعيين دالة كولباك (callback function).

عند استخدام addEventListener مثلما هو موضح في المثال الأول:

document.addEventListener("mousemove", myFunction);

هذا يعني أننا نقوم بتعيين دالة myFunction كدالة استجابة لحدث "mousemove" ،وتلك الدالة ستُستدعى في كل مرة يتم فيها تحريك الماوس على الشاشة، وسيتم تنفيذ الكود الموجود في داخل الدالة في كل مرة.

أما الشيء الذي قمت بتجربته:

document.addEventListener("mousemove", document.getElementById("demo").innerHTML = Math.random());

هناك خطأ في الاستخدام، لأنك تقوم بتعيين نتيجة تقييم تعبير document.getElementById("demo").innerHTML = Math.random() كدالة استجابة للحدث "mousemove"، وذلك ليس هو الهدف المطلوب.

بالنسبة للجزء الثاني من السؤال، عند استخدام setTimeout، يجب تمرير دالة كولباك كمعامل أول والوقت الذي يجب أن تنتظره كمعامل ثاني. لذلك، يجب استخدامه بهذه الطريقة:

const myTimeout = setTimeout(function() {
  document.getElementById("demo").innerHTML = "Happy day!";
}, 5000);

وذلك سيؤدي إلى تغيير نص العنصر برقم عشوائي بعد مرور 5 ثواني من تنفيذ السكريبت.

اذا لماذا نستعمل callback في حين ان العمليه تعمل دون  callback function?

 

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

  • 0

أنت تقصد addEventListener، صحيح؟ 

في حال أردت تنفيذ أمر معين عند حدوث حدث محدد، عليك إما تمرير دالة callback لكي يتم استدعائها عند وقوع الحدث، أو كتابة دالة يتم استدعائها عند وقوع الحدث وليس كتابة الكود بشكل مباشر، أي نكتب دالة كالتالي بدلاً من callback:

function randomNumberGenerator() {
  return Math.random();
}

document.addEventListener("mousemove", function(e) {
  document.getElementById("demo").innerHTML = randomNumberGenerator();
});

 

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

  • 0
بتاريخ 2 دقائق مضت قال Mustafa Suleiman:

أنت تقصد addEventListener، صحيح؟ 

في حال أردت تنفيذ أمر معين عند حدوث حدث محدد، عليك إما تمرير دالة callback لكي يتم استدعائها عند وقوع الحدث، أو كتابة دالة يتم استدعائها عند وقوع الحدث وليس كتابة الكود بشكل مباشر، أي نكتب دالة كالتالي بدلاً من callback:

function randomNumberGenerator() {
  return Math.random();
}

document.addEventListener("mousemove", function(e) {
  document.getElementById("demo").innerHTML = randomNumberGenerator();
});

 

شكرا لك الضاهر اني ازعجتك لاكن الcallback لا زلت غير مقتنع كيف تعمل , و ايضا لما تم وضع E كمعامل لداله رد النداء؟؟

تم اضافتها رغم انه لا يوجد مندخلات فما الحاجه اليها ؟

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...