Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 替换关联数组变量_Javascript_Ruby On Rails_Ruby On Rails 3_Associative Array - Fatal编程技术网

Javascript 替换关联数组变量

Javascript 替换关联数组变量,javascript,ruby-on-rails,ruby-on-rails-3,associative-array,Javascript,Ruby On Rails,Ruby On Rails 3,Associative Array,下面是一个问题 我的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. T

下面是一个问题

我的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\u users\u hash
只是一个Ruby hash,我必须调用
html\u safe
,这样它才能正确地转换为Javascript关联数组(是的,我知道它实际上只是一个对象)

但是,当我单击
.add_nested_字段调用
on
事件时,我的控制台日志显示出来

Object {} 

我不知道为什么没有更新assoc_数组。我的代码出了什么问题?我该如何修复它?

它看起来像是您的
名称\u散列
(您可以通过
变量名称\u散列
在返回中重新定义,然后对任何更高范围的变量进行阴影处理)与您单击它的范围不在同一范围内。感谢你的包装器功能。您将需要某种方式—通过事件或回调等—来访问该范围内的变量,并将其设置为您希望使用的值

编辑

进一步解释的非理想但样本溶液为:

var names_hash = {};
$(function() {
  $(".container").on("click", ".add_nested_fields", function() {
    console.log(names_hash);
  });
});
然后,当你的回答出现时,你只需:

names_hash = <%= @group_users_hash.html_safe %>;
然后,您可以修改您的回复:

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

还有中提琴。您已经保护了全局作用域,还公开了要在包装器函数之外访问的函数。

您还应该在AJAX请求中发布代码。我发布了。不过我要澄清一下。我猜你用另一个
var
跟踪了
assoc_数组
,但不幸的是,我只能猜测。@jason328:恕我直言,如果你不知道是什么导致了这个问题,那么你可能不知道什么代码是不必要的。您应该提供一个完整但最简单的问题示例。@amnotiam正在查看表单上的响应和提交,我猜他在表单上使用了
remote:true
选项,这样您就可以打开rails不引人注目的javascript文件,并检查它用来制作Ajax以提交到服务器的代码。在更新后,他的代码已经足够完整,足以说明问题。这是我在引用
var names\u hash
时的一个错误。我刚刚更新了它。但如果这是包装问题,那么我至少知道从哪里开始。谢谢。我马上去看看,然后告诉你结果。太棒了。它起作用了。谢谢你的详细解释。我会确保从现在起避免那个问题。@jason328很高兴我能帮你解决!
names_hash = <%= @group_users_hash.html_safe %>;
(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 %>;