2009-03-02 60 views
0

我写一小段代码使用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

我注意到,你有.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);

让我知道如果这工作得更好!

+0

是的,我只是在这里重写一个小例子。真正的代码waaay更大:)无论如何,谢谢为通知 – 2009-03-02 20:03:00

1

我明白你想要做什么,但你需要存储新创建的窗口,以便你可以在关闭回调函数中访问它。您可能想要查看jQuery UI Dialog。它为对话框窗口(模式和其他)提供了一些非常基本的功能,并处理一些回调实现。

+0

我无法使用UI。我使用jQuery的古董版本,我不能升级,因为我使用接口(这意味着最大jQuery的1.1.3 :() – 2009-03-02 19:38:52