使用click事件跨模块的Javascript调用变量

时间:2018-08-20 14:05:07

标签: javascript function module addeventlistener

新手Javscripter在这里。我正在尝试对模块进行一些练习,但遇到了麻烦。我正在尝试获取controller模块来以最小的成功访问wagerAmount模块中的UIControl(由用户输入)。我的相关代码如下:

var UIControl = (function() {
  return {
    getWager: function() {
      return {
          wagerAmount: document.getElementById('wager').value
      };
    }
  };
})();


var controller = (function(UICont) {
  var topics = ['sports', 'history', 'technology', 'music', 'movies'];
  var wager = UICont.getWager();

  var changeClass = function() {
    document.getElementById('bet').addEventListener('click', function() {
      console.log(wager);
      for (var i = 0; i < topics.length; i++) {
        if (document.getElementById(topics[i]).classList[1] == 'select') {
                activateAnswers();
            }
        }
    });
  }
})(UIControl);

运行此命令时,console.log(wager)打印一个空字符串{wagerAmount: ""}。如果我在wager函数中声明changeClass,则会发生相同的情况。但是,如果我在click事件中声明了wager,它将打印用户输入的数字。但点击事件可以很好地访问topics中声明的controller变量。这里的主要问题是,当我需要将功能添加到多个click事件中时,我将不得不在每个click事件中声明一个新变量以访问相同的函数,这听起来像是不好的做法。那么这是怎么回事?

1 个答案:

答案 0 :(得分:0)

好吧,所以在昨晚花了几个小时试图解决这个问题之后,今天早上我在喝咖啡后很快想出了解决方案。万一有其他人遇到此问题,我将发布我的解决方案,如果其他人提出其他建议,他们也可以发布。

我没有在wager中的任何地方声明controller,而是在controller内创建了一个新函数:

var retrieveWager = function() {
    return {
        wager: UICont.getWager().wagerAmount
    };
}

,然后可以在任何这样的点击事件中访问它:

retrieveWager().wager;