كيف يقوم JQuery بإنشاء أحداثه المخصصة وهل يمكنني إعادة إنشائها في Javascript؟

StackOverflow https://stackoverflow.com//questions/25082764

سؤال

إنني أتطلع إلى إنشاء أحداث في Javascript باستخدام نفس منهجية JQuery - هل يعرف أحد كيف يقوم JQuery بذلك؟

منطقي هو أن استخدام جافا سكريبت الخام مثل هذا:

var myEvent = new CustomEvent("userLogin", eventProperties);

...لا يعمل فعليًا على متصفح Android الأصلي، لأنه لا يدعم DOM Level 3 مثل Chrome والمتصفحات الأخرى.

ومع ذلك، مسج يفعل يعمل على متصفح الأسهم لنظام Android، ويستخدم ببساطة:

$.event.trigger('MyEvent');

سؤالي هو ما هو الكود وراء ذلك؟حاولت العثور عليه من خلال المرور عبر JQuery مصدر الرمز, ، لكن لا أستطيع أن أحيط برأسي حوله!

هل كانت مفيدة؟

المحلول

الشيء الأساسي هنا هو هذا:عندما تقوم بربط معالج الأحداث باستخدام jQuery، فإن jQuery لا أضف هذا المعالج مباشرة إلى عنصر DOM.بدلًا من ذلك، تقوم jQuery بربط معالج خاص بها على عنصر DOM (إذا لم يكن يحتوي على معالج بالفعل).عند وقوع الحدث، تبحث jQuery في قائمة المعالجات المسجلة في jQuery للحدث وتقوم بتشغيلها بالترتيب.(هناك عدة أسباب لذلك؛في البداية كان الأمر يتعلق بشكل أساسي بتسريبات ذاكرة IE وحقيقة أن IE أطلق المعالجات بترتيب واحد، وكل الآخرين بترتيب مختلف؛لذلك تولى jQuery المسؤولية وتأكد من الأمر.)

(قد تكون قادرًا على رؤية أين سأذهب بهذا ...)

لذلك عندما تستخدم trigger, يرسل jQuery الحدث الاصطناعي إلى عنصر DOM، لكنه لا يفعل ذلك يعتمد على هذا الحدث الاصطناعي للعمل؛فهو يستدعي المعالجات التي قمت بتسجيلها من خلال jQuery مباشرة.في الواقع، يقوم بتعيين علامة حتى يعرف أنه فعل ذلك، فإذا كان المتصفح يفعل أرسل الحدث إلى معالج jQuery من أجله، ويعلم jQuery أنه يجب عليه تجاهله (نظرًا لأنه قام بعمله بالفعل).

يمكنك أن ترى هذا بكل مجده بدءًا من السطر 4,464 من ملف jQuery غير المضغوط الحالي.

لذا، تقوم jQuery بشكل أساسي ببناء نظام النشر/الفرعي الخاص بها، وتستخدم فقط نظام أحداث المتصفح كمدخل له.لذلك لا يلزم عادةً أن تتصل الأحداث المخصصة بالمتصفح على الإطلاق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top