JQuery:在点击监听器上没有保持实例变量不在循环中

时间:2017-06-22 21:24:23

标签: javascript jquery loops listener onclicklistener

我正在点击并点击网站等冒险/约会模拟游戏。我目前正在制作对话选项。会话中某个点出现的选项,允许用户选择他们的回复,或者选择某种提示选项。

我的整个系统似乎工作得很好,除了我将对话选项填充到提示符的一步。

import pandas.io.data as web
import datetime

start = datetime.datetime(2010, 1, 1)  
end = datetime.datetime(2013, 1, 27)
f = web.DataReader("INDEXDB%3ADAX", 'google', start, end)

我从参数中加载任意数量的Dialogue Options及其伙伴函数。然后循环遍历它们,在提示的HTML中列出名称,并为它们提供唯一的ID。

然后我按唯一ID选择元素并给它一个onclick监听器,它引用特定选项传入的函数。

但是,单击它们时,所有元素都会运行最后一个选项功能。我怀疑听众指向" func"每次我在循环中更改它时都会变量和更新。

如何让侦听器引用变量的实例,以便我制作的每个新侦听器都引用它自己的" func"可变吗

1 个答案:

答案 0 :(得分:1)

这是一个典型的关闭问题。你有两个选项,一个是用循环的当前索引调用每个函数。

for (var i = 1; i < 3; i++) {
  (function(index) {
    var Option = eval(O['o' + index]);
    if (typeof(Option) !== 'undefined') {
      $("#CAM_OptionsFrame").append("<p id='DialogueO" + index + "' class='clickable'>" + Option[0] + "</p>");

      var funcString = Option[1];
      var func = window[funcString];
      $('#DialogueO' + index).on("click", function() {
        $(this).off("click");
        endDialogueOption(time, O.noHide, function() {
          func();
        });
      });
    }
  })(i)
}

如果您在代码库中获得了ES6支持,那么在for循环中,如果var改为let,则唯一需要更改的内容。

for (let i = 1; i < 3; i++) {
.. everything else remains the same.