Bandar Abuseada نشر 10 أغسطس 2023 أرسل تقرير نشر 10 أغسطس 2023 (معدل) <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 ? تم التعديل في 10 أغسطس 2023 بواسطة Mustafa Suleiman تعديل عنوان السؤال ونص السؤال 1 اقتباس
0 Mustafa Suleiman نشر 10 أغسطس 2023 أرسل تقرير نشر 10 أغسطس 2023 هناك خلط في الفهم بين كيفية استخدام وتسجيل الحدث (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 ثواني من تنفيذ السكريبت. 1 اقتباس
0 Bandar Abuseada نشر 10 أغسطس 2023 الكاتب أرسل تقرير نشر 10 أغسطس 2023 بتاريخ 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? 1 اقتباس
0 Mustafa Suleiman نشر 10 أغسطس 2023 أرسل تقرير نشر 10 أغسطس 2023 أنت تقصد addEventListener، صحيح؟ في حال أردت تنفيذ أمر معين عند حدوث حدث محدد، عليك إما تمرير دالة callback لكي يتم استدعائها عند وقوع الحدث، أو كتابة دالة يتم استدعائها عند وقوع الحدث وليس كتابة الكود بشكل مباشر، أي نكتب دالة كالتالي بدلاً من callback: function randomNumberGenerator() { return Math.random(); } document.addEventListener("mousemove", function(e) { document.getElementById("demo").innerHTML = randomNumberGenerator(); }); 1 اقتباس
0 Bandar Abuseada نشر 10 أغسطس 2023 الكاتب أرسل تقرير نشر 10 أغسطس 2023 بتاريخ 2 دقائق مضت قال Mustafa Suleiman: أنت تقصد addEventListener، صحيح؟ في حال أردت تنفيذ أمر معين عند حدوث حدث محدد، عليك إما تمرير دالة callback لكي يتم استدعائها عند وقوع الحدث، أو كتابة دالة يتم استدعائها عند وقوع الحدث وليس كتابة الكود بشكل مباشر، أي نكتب دالة كالتالي بدلاً من callback: function randomNumberGenerator() { return Math.random(); } document.addEventListener("mousemove", function(e) { document.getElementById("demo").innerHTML = randomNumberGenerator(); }); شكرا لك الضاهر اني ازعجتك لاكن الcallback لا زلت غير مقتنع كيف تعمل , و ايضا لما تم وضع E كمعامل لداله رد النداء؟؟ تم اضافتها رغم انه لا يوجد مندخلات فما الحاجه اليها ؟ اقتباس
السؤال
Bandar Abuseada
في هذا المثال قمت بستعمال عمليات الاسترجاع 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تعديل عنوان السؤال ونص السؤال
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.