سؤال

اعتدت مسج على تعيين تحوم رد على العناصر على الصفحة.أنا أكتب الآن وحدة نمطية التي يحتاج مؤقتا مجموعة جديدة تحوم في سلوك بعض العناصر.وحدة جديدة قد لا الوصول إلى الأصل رمز تحوم وظائف.

أريد أن المخزن القديم تحوم وظائف قبل مجموعة جديدة حتى لا يمكن استعادتها عند الانتهاء المؤقتة تحوم السلوك.

أعتقد أن هذه يمكن تخزينها باستخدام jQuery.data() وظيفة:

//save old hover behavior (somehow)

$('#foo').data('oldhoverin',???)

$('#foo').data('oldhoverout',???);

//set new hover behavior

$('#foo').hover(newhoverin,newhoverout);

أفعل أشياء جديدة تحوم السلوك...

//restore old hover behaviour
$('#foo').hover($('#foo').data('oldhoverin'),$('#foo').data('oldhoverout'));

ولكن كيف يمكنني الحصول على تسجيلها حاليا تحوم وظائف من jQuery ؟

Shadow2531, أنا أحاول أن أفعل هذا دون تعديل التعليمات البرمجية التي في الأصل تسجيل الاستدعاء.الاقتراح الخاص بك سوف تعمل بشكل جيد على خلاف ذلك.شكرا على الاقتراح ، وللمساعدة في توضيح ما أبحث عنه.ربما يجب أن أذهب إلى مصدر مسج و معرفة كيفية هذه الاسترجاعات المخزنة داخليا.ربما يجب تغيير السؤال "هل من الممكن أن تفعل هذا دون تعديل jquery؟"

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

المحلول

واصفا الحدث bind الطريقة (مثل hover) لا حذف القديم معالجات الأحداث فقط يضيف أحداث جديدة ، لذلك فكرة 'استعادة' الحدث القديم الوظائف لا تعمل, كما أنه لا حذف الأحداث الخاصة بك.

يمكنك إضافة الأحداث الخاصة بك ، ثم قم بإزالة لهم دون التأثير على أي أحداث أخرى ثم استخدام الحدث namespacing: http://docs.jquery.com/Events_(دليل)#Namespacing_events

نصائح أخرى

لست متأكدا إذا كان هذا سوف تعمل ، ولكن يمكنك أن تجرب هذا:


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Jquery - Get, change and restore hover handlers</title>
        <script src="jquery.js"></script>
        <script>
            function setHover(obj, mouseenter, mouseleave) {
                obj.data("_mouseenter", mouseenter);
                obj.data("_mouseleave", mouseleave);
                obj.hover(obj.data("_mouseenter"), obj.data("_mouseleave"));
            }
            function removeHover(obj) {
                obj.unbind("mouseenter", obj.data("_mouseenter"));
                obj.unbind("mouseleave", obj.data("_mouseleave"));
                obj.data("_mouseenter", undefined);
                obj.data("_mouseleave", undefined);
            }
            $(document).ready(function() {
                var test = $("#test");
                setHover(test, function(e) {
                    alert("original " + e.type);
                }, function(e) {
                    alert("original " + e.type);
                });
                var saved_mouseenter = test.data("_mouseenter");
                var saved_mouseleave = test.data("_mouseleave");
                removeHover(test);
                setHover(test, function() {
                    alert("zip");
                }, function() {
                    alert('zam');
                });
                removeHover(test);
                setHover(test, saved_mouseenter, saved_mouseleave);
            });
        </script>
    </head>
    <body>
        <p><a id="test" href="">test</a></p>
    </body>
</html>

إن لم يكن, ربما أنها سوف تعطي لك بعض الأفكار.

لست متأكدا إذا كان هذا هو ما تعنيه ، ولكن يمكنك ربط الأحداث المخصصة ومن ثم تؤدي لهم.

http://docs.jquery.com/Events/bind

إضافة لذلك تحوم الحدث النصي وظائف تحتاج أن تحوم ، ثم الزناد المخصصة لهذا الحدث.

ربما سيكون من الأسهل لمجرد إخفاء القديمة عنصر إنشاء نسخة مع معالجات الأحداث تعلق ؟ ثم مجرد مبادلة مرة في العمر عنصر عند الانتهاء من ذلك..

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