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

السؤال

نشر (معدل)
<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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...