jquery在html attr中添加函数回调以在其他事件中调用

时间:2015-02-09 21:49:06

标签: javascript jquery function callback

我有这样的链接

<a href="#" class="open_popup" data-callback="after_close_popup_do">Open popup</a>

我在jquery中有这段代码

function after_close_popup_do(obj , list){
   console.log( "obj =>"+obj+"  && List =>"+list );
}

$("a.open_popup").click(function(){
   $(this).addClass("shown");
   $("#popup").attr("data-callback" , $(this).attr("data-callback")) ;
   return false;
});

完成弹出窗口中的操作并单击完成按钮

$("#popup a.finish_popup").click(function(){
     var callback = $("#popup").attr("data-callback");
     var o = $("#target_div") ;
     var list = {"items"=>{"a":"55","b":33}} ;
     // I shoud here use the callback function
        if( typeof window[callback] !== "function" ) {
              console.log( "your function not working" ) ;
        }else{
              window[c]( list , o ) ; // We Called your function
              console.log( "your function work fine" ) ;
        }

}) ;

如何在此代码中使用自定义函数作为回调调用?

谢谢

1 个答案:

答案 0 :(得分:1)

不要试图以这种方式查找功能名称。相反,使用您自己的对象来跟踪功能:

var callbacks = {
    after_close_popup_do: function(obj , list){
       console.log( "obj =>"+obj+"  && List =>"+list );
    },
    ...
};

然后在此对象中查找,而不是window

$("#popup a.finish_popup").click(function(){
    var callback = $("#popup").attr("data-callback");
    var o = $("#target_div") ;
    var list = {"items"=>{"a":"55","b":33}} ;
    // I shoud here use the callback function
    if( typeof callbacks[callback] !== "function" ) {
        console.log( "your function not working" ) ;
    } else {
        callbacks[callback]( list , o ) ; // We Called your function
        console.log( "your function work fine" ) ;
    }
});

这将允许您使用本地功能;您的原始代码要求在全局上下文中定义函数,以便将它们添加到window