Как сделать — функции обратного вызова
-
03-07-2019 - |
Вопрос
У меня большая проблема с написанием небольшого фрагмента кода с использованием 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.Он предоставляет некоторые действительно базовые функции для диалоговых окон (модальных и других) и обрабатывает некоторые реализации обратного вызова.