سؤال

أواجه مشكلة كبيرة في كتابة جزء صغير من التعليمات البرمجية باستخدام JS/jQuery (لا أعرف أيًا منها يسبب المشكلة).على أية حال، هنا نذهب:

$('#themePicker').unbind().click(function() {
    var t = $(this);    
    modalwindow2(t, function() {
        console.log(1);
    }, function(w) {
        console.log(w);
    });

    return false;
});

والوظيفة نفسها:

function modalwindow2(w, callbackOnSHow, callbackOnHide) {
    if (typeof(callbackOnSHow) == 'function') {
        callbackOnSHow.call();
    }

    // do some stuff //
    $('form').submit(function() {
        ajaxSubmit(function(data) {
            if (typeof(callbackOnHide) == 'function') {
                console.log('---------------');
                console.log(data);
                console.log('---------------');
                callbackOnHide.call(data);
            }
        });

        return false
    });
}

يتم استدعاء الدالة modalwindow2 وأريد استدعاء وظيفة عند ظهور الشكل ووظيفة أخرى عندما يكون الشكل مخفيًا.

الأول ليس مشكلة.

الثاني... حسنًا... دعنا نقول فقط إنها مشكلة.لماذا؟

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

آمل أن أكون قد أوضحت نفسي بما فيه الكفاية.

شكرًا!

يحرر:

أنا أستخدم jQuery 1.1.2 (أو 1.1.3) ولا يعد ترقية أو استخدام jQuery UI حلاً.لدي بعض التبعيات (الواجهة واحدة منها) وليس لدي الوقت الكافي (ولا الدافع) للترقية إلى 1.3 وواجهة المستخدم 1.7.

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

المحلول

لقد لاحظت أن لديك خطأ مطبعي في .submit:$('نموذج').submti(function(){

هل كان هذا مجرد خطأ في الدخول إلى SO؟

يحرر:حسنًا، بعد الاطلاع على الكود الخاص بك وإجراء اختبار قصير، توصلت إلى ذلك هذا (العفو عن التورية):

function modalwindow2(w, callbackOnShow, callbackOnHide) {
    if(typeof callbackOnShow == 'function') {
        callbackOnShow.call();
    }
    $('form').submit(function() {
        if(typeof callbackOnHide == 'function') {
            callbackOnHide.call(this, "second");
        }
    });
}

$(document).ready(function (){
    $('#themePicker').click(function(){
        var t=$(this);
        modalwindow2(t, function() { alert("first"); }, function(x) { alert(x); });
        return false;
    });
});

يبدو أنك ربما فاتك كلمة "هذا" في عبارة call() الخاصة بك.حاول استخدام callbackOnHide.call(this, data);

اسمحوا لي أن أعرف إذا كان هذا يعمل بشكل أفضل!

نصائح أخرى

وأنا أفهم ما يحاولون القيام به، ولكنك لن تحتاج لتخزين النافذة التي أنشئت حديثا بحيث يمكنك الوصول إليه على وظيفة رد قريبة.

وأنت قد ترغب في النظر في مسج UI الحوار . ويوفر بعض الوظائف الأساسية حقا للنوافذ الحوار (مشروط وغير ذلك) ويتعامل مع بعض لتنفيذ الاستدعاء.

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