سؤال

هل هناك طريقة لتشغيل وظيفة فقط إذا تم استدعاء Event.PreventDefault () في حدث (بواسطة وظيفة أخرى غير معروفة). هذا مخصص للمكون الإضافي jQuery ، لذلك ليس لدي أي معرفة بما قد تفعله أجزاء أخرى من الصفحة. لقد جربت هذا:

Event.test = Event.preventDefault;
Event.preventDefault = function () {
    alert('Success');
    this.test();
}

لكنه لا يعمل ... فقط يتصرف كالمعتاد ، دون أي أخطاء.

على العكس ، أريد العكس أيضًا ... أن أتصل بوظيفة فقط إذا لم يتم استدعاء Event.PreventDefault (). في الواقع ، لإضافة وظيفة إلى الإجراء الافتراضي لحدث ما. أيه أفكار؟ هل كل هذا ممكن على الإطلاق؟

تحرير: بناءً على التعليق ، لدي حل للمشكلة الأولى: http://jsfiddle.net/nathan/vaepb/9/. إنه يعمل في الكروم (التنبيهات function preventDefault() { [native code] }, ، لكن التنبيهات undefined. لذلك ، لن تسمح لي بتحديد Event.Protype.test ، ولكن سيسمح لي بإعادة تعريف Event.Prototype.PreventDefault. عجيب. أنا متأكد من أنه يمكنني التوصل إلى حل للمشكلة الثانية بناءً على هذه المشكلة إذا كان بإمكاني الحصول عليها للعمل في IE.

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

المحلول

للمشكلة الأولى ، جرب شيئًا كهذا:

oldPreventDefault = Event.prototype.preventDefault;
Event.prototype.preventDefault = function() {
    //do stuff
    oldPreventDefault.call(this);
}

لا أعرف ما إذا كان ذلك سينجح ، ولكن قد يكون الأمر يستحق اللقطة.

للمشكلة الثانية ، سأحاول شيئًا مشابهًا لمعالجة الأحداث المباشرة. ضع مستمعًا على عنصر الوالدين (أي body أو المستوى الأعلى div). إذا كنت تستطيع الحصول على خطافك preventDefault كما ذكر من قبل ، يمكنك استخدام ذلك لتعيين العلم. إذا تصل الحدث إلى هذا العنصر ولم يتم تعيين علمك ، فقم بالسلوك الممتد. على الرغم من أن هذا لن يعمل مع جميع الأحداث ، حيث ليس كل الأحداث فقاعة. هناك طريقة أخرى لمعالجة هذه المشكلة قد تكون تأخير التنفيذ حتى تنتهي المكدس الحالي setTimeout(0,...) ثم التحقق من العلم.

نصائح أخرى

لست متأكدًا من أنني أفهم. لا يمكنك استخدام فقط event.isDefaultPrevented() مثل هذه

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