Вопрос

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

Надеюсь, я достаточно ясно выразился.

Спасибо!

Редактировать:

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

Это было полезно?

Решение

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

Было ли это просто ошибкой входа в 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;
    });
});

Похоже, вы просто пропустили «this» в своем операторе call().Попробуйте использовать callbackOnHide.call(this, data);

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top