如何 - 回调函数

时间:2009-03-02 19:26:57

标签: javascript jquery callback

使用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 UI不是一个解决方案。我有一些依赖(接口是其中之一),我没有足够的时间(也没有动力)升级到1.3& UI 1.7。

2 个答案:

答案 0 :(得分:1)

我理解你要做的是什么,但你需要存储新创建的窗口,以便你可以在关闭的回调函数上访问它。

您可能需要查看jQuery UI Dialog。它为对话框窗口(模态和其他)提供了一些非常基本的功能,并处理了一些回调实现。

答案 1 :(得分:1)

我注意到你有一个拼写错误.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;
    });
});

看起来你可能刚刚错过了call()语句中的“this”。尝试使用callbackOnHide.call(this,data);

让我知道这是否更好!