-1

以下是以下問題。替換關聯數組變量

我的JavaScript文件包含以下代碼...

$(function() { 
    var names; 
    var names_hash = { }; 
    // When an user types in a letter in the student name input field 
    $(".container").on("keyup", "#term", function(){ 
    // Here we are submitting the form via AJAX. The form contains necessary 
    // Rails code to initiate the AJAX   
    $(this).parents(".student-search-form").submit(); 
    }); 

    $(".container").on("click", ".add_nested_fields", function() { 
    var term = $("#term").val(); 

    console.log(names_hash); 
    }); 
}); 

現在,當我輸入一個字符到輸入域ID term Rails的控制器動作被調用,並具有以下的JavaScript響應。

僅供參考,@group_users_hash只是一個Ruby散列,我必須調用html_safe,以便它可以正確轉換爲Javascript關聯數組(是的,我知道它實際上只是一個對象)。

names_hash = <%= @group_users_hash.html_safe %>; 

console.log(names_hash); 

所以當AJAX完成,我看到console.log(names_hash);了我的控制檯

Object {1: "Jason"} 

上產生但當我在.add_nested_fields點擊調用on事件,我的控制檯日誌顯示

Object {} 

我不知道爲什麼assoc_array沒有被更新。我的代碼有什麼問題,我該如何解決它?

+0

您應該在AJAX請求中發佈代碼。 – Calvin 2013-04-10 20:25:05

+0

我做到了。我會澄清它。 – jason328 2013-04-10 20:25:50

+1

我會猜測你將'assoc_array'與另一個'var'相互影響,但不幸的是我所能做的只是猜測。 – 2013-04-10 20:26:11

回答

1

它看起來像你的names_hash(你通過var names_hash重新定義了你的回報,然後覆蓋任何更高範圍的變量)與你點擊它時的範圍不在同一範圍內。感謝你的包裝功能。您將需要某種方法 - 通過事件或回調等等訪問該範圍內的變量並將其設置爲您希望使用的值。

編輯

非理想的,但樣品溶液進一步解釋woudl是:

var names_hash = {}; 
$(function() { 
    $(".container").on("click", ".add_nested_fields", function() { 
    console.log(names_hash); 
    }); 
}); 

然後當你的迴應進來,你只需:

names_hash = <%= @group_users_hash.html_safe %>; 

然後你應該是金色的。這不是理想的原因是因爲你的names_hash在全局範圍內浮動。這是最好的「命名」,如:

(function() { 
    // prevent redefining it if it's already defined via another file 
    var MyNamespace = window.MyNamespace || {}; 

    MyNamespace.names_hash = {}; 

    window.MyNamespace = MyNamespace; 
})(); 

$(function() { 
    $(".container").on("click", ".add_nested_fields", function() { 
    console.log(MyNamespace.names_hash); 
    }); 
}); 

並從那裏你修改您的回覆:

MyNamespace.names_hash = <%= @group_users_hash.html_safe %>; 

和中提琴。您已經保護了全局作用域,並且還公佈了您想要在包裝函數外部訪問的函數。

+0

當引用'var names_hash'時,這是我的錯誤。我剛剛更新了它。但如果這是一個包裝問題,那麼我至少知道從哪裏開始。 – jason328 2013-04-10 20:50:02

+0

@ jason328我對示例代碼有更好的解釋。 – 2013-04-10 20:55:31

+0

謝謝。我會在一秒鐘內檢查出來,並讓你知道結果。 – jason328 2013-04-10 21:02:38