我正在点击并点击网站等冒险/约会模拟游戏。我目前正在制作对话选项。会话中某个点出现的选项,允许用户选择他们的回复,或者选择某种提示选项。
我的整个系统似乎工作得很好,除了我将对话选项填充到提示符的一步。
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"可变吗
答案 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.