2009-03-02 4 views
0

У меня большая проблема с написанием небольшого фрагмента кода с использованием JS/jQuery (не знаю, какая из них вызывает проблему). Во всяком случае, здесь мы идем:How to - функции обратного вызова

$('#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. & UI 1.7.

ответ

1

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

Было ли это просто ошибка входа в SO

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

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

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

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

+0

да, я просто переписываю здесь небольшой пример. Реальный код waaay больше :) Во всяком случае, спасибо для уведомления –

1

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

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

+0

Я не могу использовать интерфейс. Я использую антикварную версию jquery, и я не могу обновить, потому что я использую интерфейс (что означает max jquery 1.1.3 :() –

Смежные вопросы