2015-02-09 69 views
-1

叫我有這樣的jQuery插件功能調用回HTML ATTR在其他事件

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

}) ; 

如何使用自定義函數在此代碼中調用回調?

謝謝

+0

結果總是'你的功能不工作'# – Safy 2015-02-09 21:49:51

+1

'窗口[c]'應該是'窗口[回調]'。 – Barmar 2015-02-09 21:51:33

+0

soryy手錯誤,但它不去這個代碼,因爲窗口[回調]不起作用,它返回你的功能不工作 – Safy 2015-02-09 21:53:59

回答

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

+0

謝謝@Barmar我的自定義對象對我來說是個好主意,它起作用 – Safy 2015-02-09 22:20:34