更新事件上的jQuery变量

时间:2013-12-30 16:50:26

标签: javascript jquery

我设置了jquery var location_dir并在var中使用,如下所示:

var location_dir = 'home/user';

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

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

location_dir点击事件更新如下:

$(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_dir没有更新这些点击事件,而是维护初始值。我是否需要将var settings = { ...包装在函数或其他内容中?

3 个答案:

答案 0 :(得分:1)

该变量不是问题,它是您的settings变量,更新它!

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

你只是抓住那个变量的值,它不是一个参考。您必须更新settings,因为它是您在uploadFile函数中实际使用的内容。

答案 1 :(得分:1)

问题是, JS不是被动的。当解析器通过此代码时,settings.formData.location以及uploadFile在此时获得location_dir的值。点击时,您只需更改location_dir变量,而不更改其他变量。

假设您需要更改settings.formData.location的{​​{1}},您可以:

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

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

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

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

答案 2 :(得分:0)

你需要在点击事件中完成所有这些操作,因为无论如何正在运行外部项目,而你在点击时所做的只是设置值。

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