هل يؤدي استخدام Shadowbox إلى تعطيل اختصارات لوحة المفاتيح؟

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

سؤال

لذلك يستخدم موقعي com.shadowbox للقيام بعرض بعض النص الديناميكي.المشكلة هي أنني أحتاج إلى أن يتمكن المستخدم من نسخ هذا النص ولصقه.

النقر بزر الماوس الأيمن واختيار النسخة يعمل ولكن كنترول+ج لا (لا توجد اختصارات لوحة المفاتيح تفعل ذلك) ويستخدمها معظم الأشخاص كنترول+ج؟يمكنك رؤية مثال على ما أتحدث عنه هنا.

ما عليك سوى الانتقال إلى أمثلة "الويب" والنقر على "مضمنة".لاحظ أن اختصارات لوحة المفاتيح تعمل في مثال "هذه الصفحة".الفرق الوحيد بين الاثنين الذي أراه هو ملفات player js التي يستخدمونها.يستخدم "Inline" مشغل html.js ويستخدم "هذه الصفحة" iframe.js.وأعتقد أيضًا أنه يستخدم مكتبة mootools.أيه أفكار؟

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

المحلول

الخيار الأفضل هو تعطيل اختصارات التنقل في لوحة المفاتيح في صندوق الظل عن طريق تعيين خيار "تمكين المفاتيح" على "خطأ" (انظر هذه الصفحة).

وبدلاً من ذلك، يمكنك القيام بما يقترحه روبي وتعديل ملف Shadowbox.js، ولكن لا تفعل ذلك إلا إذا كنت بحاجة إلى التنقل باستخدام لوحة مفاتيح Shadowbox.أعتقد أنك تريد البحث عن مجموعة التعليمات البرمجية هذه وتعديلها بحيث تلغي الحدث الافتراضي فقط إذا تم استخدام أحد الاختصارات (لقد أضفت بعض فواصل الأسطر والمسافات البادئة):

var handleKey=function(e){
    var code=SL.keyCode(e);
    SL.preventDefault(e);
    if(code==81||code==88||code==27){
        SB.close()
    }else{
        if(code==37){
            SB.previous()
        }else{
            if(code==39){
                SB.next()
            }else{
                if(code==32){
                    SB[(typeof slide_timer=="number"?"pause":"play")]()
                }
            }
        }
    }
};

أعتقد أنه يمكنك تغييرها لتبدو أكثر مثل هذا:

var handleKey=function(e){
    switch(SL.keyCode(e)) {
        case 81:
        case 88:
        case 27:
            SB.close()
            SL.preventDefault(e);
            break;

        case 37:
            SB.previous()
            SL.preventDefault(e);
            break;

        case 39:
            SB.next()
            SL.preventDefault(e);
            break;

        case 32:
            SB[(typeof slide_timer=="number"?"pause":"play")]()
            SL.preventDefault(e);
            break;
    }
};

من المفترض أن يمنع هذا معالج أحداث Shadowbox من ابتلاع أي ضغطات مفاتيح لا يهتم بها.

نصائح أخرى

سبب هذه المشكلة هو بعض جافا سكريبت التي تأكل أحداث لوحة المفاتيح.يمكنك الضغط على مفتاح الهروب، على سبيل المثال، الذي يتم احتجازه بواسطة أحد ملفات .js ويتسبب في إغلاق مربع الظل.

اختياراتك هي اختراق الملفات والعثور على المشكلة، أو عدم استخدام Shadowbox.حظ سعيد!

الحل هو ضبط خيار تمكين المفاتيح على خطأ.ومع ذلك، يبدو أن هذا لا يعمل عند استدعاء open() لـ HTML المضمّن.ومع ذلك، فهو يعمل إذا قمت بتعيينه في استدعاء init() الخاص بك.

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