2013-05-01 152 views
0

所以我發現一個awesome solution需要在jQuery中使用全局變量。我在任何地方都說命名空間,最初我打算使用Global var。如何將名稱空間變量傳遞給click函數參數變量? jQuery

但是我無法通過一個簡單的點擊函數的參數發送我的命名空間變量。

我想這樣做,因爲我有這些變量需要保存並用於創建模式窗口以及讓應用程序知道動態創建的按鈕控制着什麼模式。

所以,下面是我的命名空間對象的示例,我先創建變量 我的jQuery的命名空間對象:

$.reg = { 
    masterRole : " ", 
    role_ID : " ", 
    row_Name : " ", 
    ary_Check_Role : [] 
}; 

$(document).ready(function() { 
    ... 

當你經歷當你點擊這個對於那些命名空間變量的值獲取設置應用程序按鈕(從HTML爭奪數據) 變量對我roleBtnClicked功能設置

function roleBtnClicked(event){ 

    $.reg.masterRole = $(this).html();   /* Get role name: Actor */ 
    $.reg.role_ID  = $(this).attr('role');  /* Get role-1 */ 
    $.reg.rowName  = $(this).attr('row');  /* Get row-role-1 */ 
    $.reg.blueBtn  = $(this).attr('blue');  /* Get blue-btn-1 */ 

現在模態窗口彈出,點擊一些複選框和數據推到一個數組,當你後點擊完成按鈕(下面),所有的變量需要再次保存到命名空間變量中。

我完成按鈕點擊功能,在這裏我想通過參數去把我的名字空間變量瓦爾

$(".doneButton").click(
    { 
     param1: $.reg.masterRole, 
     param2: $.reg.role_ID, 
     param3: $.reg.rowName, 
     param4: $.reg.ary_Check_Role 
    }, 
    doneBtnClicked); 

function doneBtnClicked(event){ 
    alert('$.reg.roleName = '+$.reg.roleName); 
    alert('event.data.param1 = '+event.data.param1); 

    masterRole= event.data.param1; 
    role_ID = event.data.param2; 
    rowName = event.data.param3; 
    ary_Check_Role = event.data.param4; 

注2個警報以上的點擊功能,第一個會顯示正確值,但是第二個不顯示任何東西。此外還有一個問題讓陣列來通過以及。

所以問題:我應該這樣做嗎?你如何正確地傳遞數組到一個jQuery名稱空間,然後讓它傳遞到一個單擊函數參數?

+0

在你的代碼$ .reg.masterRole被設置爲「」所以警告它什麼都不會顯示..這個代碼實際上代表了你使用的是什麼? – 2013-05-01 22:50:43

+0

對不起還有另一個函數,在doneButton之前點擊一下按鈕,設置這些變量:$ .reg.masterRole = $(this).html();我現在將這個問題添加到這個問題 – 2013-05-01 23:42:39

回答

2

首先,你應該避免把東西放入jQuery對象中。爲此使用閉包。

第二:您應該使用HTML data-...屬性和jQuery data()將自定義屬性附加到HTML元素。避免使用非標準屬性。

三:您可以使用單獨命名的函數定義事件處理程序,但它使當你真正重新使用這些功能在你的代碼的不同元素最有意義的(你似乎沒有這樣做)。例如,使用直接傳遞給.click()的匿名函數可以獲得更易於理解的代碼。

// use this shorthand instead of $(document).ready(function() { ... }); 
$(function() { 

    // variable reg will be available to all functions 
    // defined within this outer function. This is called a closure. 
    var reg = { 
    masterRole : " ", 
    role_ID : " ", 
    row_Name : " ", 
    ary_Check_Role : [] 
    }; 

    $(".roleButton").click(function (event) { 
    // modify state 
    reg.masterRole = $(this).html();   /* Get role name: Actor */ 
    reg.role_ID  = $(this).data('role');  /* Get role-1 */ 
    reg.rowName  = $(this).data('row');  /* Get row-role-1 */ 
    reg.blueBtn  = $(this).data('blue');  /* Get blue-btn-1 */ 

    // note that this requires markup like this: 
    // <button data-role="foo" data-row="bar" data-blue="baz"> 

    // ... 
    }); 

    $(".doneButton").click(function (event) { 
    // debug output 
    alert(JSON.stringify(reg, 2, 2)); 
    }); 

}); 

使用多個$(function() { ... });塊來區分應該分開的東西。

不要忘記對每個聲明的變量總是使用var。聲明爲var的變量將是全局變量 - 而且您不需要全局變量。

+0

啊謝謝,不知道關閉:)這解決了我的問題! – 2013-05-02 15:25:01

+1

你應該閱讀有關它們。起初他們很難掌握,但如果沒有適當的封閉知識來處理JavaScript是不可能的;他們對語言來說絕對是必不可少的。 – Tomalak 2013-05-02 15:28:20