Как - функции обратного вызова - PullRequest
0 голосов
/ 02 марта 2009

У меня большая проблема при написании небольшого фрагмента кода с использованием 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, и я хочу вызвать функцию, когда отображается модал, и другую функцию, когда модал будет скрыт.

Первое не проблема.

Второй ... Ну ... Скажем так, это проблема. Почему?

Я хочу, чтобы параметр был отправлен во вторую функцию. Параметр является ответом ajax, похожим на другие вещи jQuery (действие ajax, сортируемый и т. Д.).

Надеюсь, я достаточно ясно дал понять.

Спасибо!

Edit:

Я использую jQuery 1.1.2 (или 1.1.3), и обновление или использование jQuery UI НЕ является решением. У меня есть некоторые зависимости (интерфейс является одним из них), и у меня не хватает времени (или мотивации) для обновления до 1.3 и пользовательского интерфейса 1.7.

Ответы [ 2 ]

1 голос
/ 02 марта 2009

Я заметил, что у вас есть опечатка на .submit: $ ( 'форма'). Submti (функция () {

Это просто ошибка входа в SO?

EDIT: Итак, после просмотра вашего кода и проведения короткого теста я придумала this (простите за каламбур):

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;
    });
});

Похоже, что вы, возможно, только что пропустили "this" в вашем вызове (). Попробуйте использовать callbackOnHide.call (это, данные);

Дайте мне знать, если это работает лучше!

1 голос
/ 02 марта 2009

Я понимаю, что вы пытаетесь сделать, но вам нужно будет сохранить вновь созданное окно, чтобы вы могли получить к нему доступ в функции обратного вызова close.

Возможно, вы захотите взглянуть на jQuery UI Dialog . Он предоставляет некоторые действительно базовые функциональные возможности для диалоговых окон (модальные и другие) и обрабатывает некоторые реализации обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...