Javascript 在事件上更新jQuery变量

Javascript 在事件上更新jQuery变量,javascript,jquery,Javascript,Jquery,我已经设置了jqueryvar location\u dir并在var中使用,如下所示: var location_dir = 'home/user'; var settings = { formData: { location: location_dir } } $("#mulitplefileuploader").uploadFile(settings); location\u dirget更新为单击事件,如下所示: $(document).on('click

我已经设置了jquery
var location\u dir
并在var中使用,如下所示:

var location_dir = 'home/user';

var settings = {
   formData: {
       location: location_dir
   }
}

$("#mulitplefileuploader").uploadFile(settings);
location\u dir
get更新为单击事件,如下所示:

$(document).on('click', 'a.folder', function () {
   location_dir = $(this).data("location");
});
因此,我的最终脚本如下所示:

var location_dir = 'home/user';

$(document).on('click', 'a.folder', function () {
   location_dir = $(this).data("location");
});

var settings = {
   formData: {
       location: location_dir
   }
}

$("#mulitplefileuploader").uploadFile(settings);

问题是,
location\u dir
没有更新这些单击事件,而是保持初始值。我是否需要将
var settings={…
包装到函数或其他东西中?

该变量不是问题所在,而是您的
设置
变量,请更新它

$(document).on('click', 'a.folder', function () {
    settings.formData.location = $(this).data("location");
});
您只是获取该变量的值,它不是一个引用。您必须更新
设置,因为它是您在
uploadFile
函数中实际使用的内容。

问题是,JS不是被动的。当解析器通过该代码时,
设置.formData.location
以及
uploadFile
获取此时
location\u dir
的值。单击时,您只更改
location\u dir
变量,而不更改其他变量

假设您需要更改
上传文件
设置.formData.location
,您可以:

  • 如果插件提供了重新初始化配置的接口,则需要检查该插件的文档

  • 您还可以修改插件的内部结构,找到该值的存储位置,并在那里进行修改

  • 删除现有元素,替换它,并使用新设置重新初始化该新元素上的插件。粗糙,但应该可以工作

  • 希望插件依赖配置对象获取位置路径,而不是在内部缓存。对象是通过引用传递的,只要你有引用,你就可以编辑它。如果他们没有缓存它,那么你可以直接执行
    settings.formData.location=anotherValue
    ,它应该会更改位置插件使用


您需要在点击事件中执行所有这些操作,因为外部项目仍在运行,而您在点击事件中所做的只是设置值

  var location_dir = 'home/user';

  $(document).on('click', 'a.folder', function () {
      var loc = ($(this).data("location"))? $(this).data("location") : location_dir;
      $("#mulitplefileuploader").uploadFile({formData: {location:  loc }});
  });

删除location_dir only type=>location_dir='home/user';@chakrounyesser之前的“var”,这将简单地使变量成为全局变量,在这种情况下没有帮助(参见梦想家Joseph的答案),并且被认为是不好的做法(即).我同意这是一个糟糕的做法…:D感谢答案和其中的细节。第四个选项,或者更确切地说是@tymeJV-answer成功了。