var myTimelineVis = {
loadData: function(visItems, visContainer, visOptions, visTimelines) {
$.getJSON('myURL/' + $(this).val(), function(data) {
visItems.clear();
$.each(data, function(i, imp_sched_events) {
$.each(imp_sched_events.items.timeline_dataset, function(i, item) {
visItems.add(item);
if ($(visContainer).is(':empty')) {
visTimeline = new vis.Timeline(visContainer, visItems, visOptions);
} else {
visItems.update(item);
}
visTimeline.fit();
$('.vis-item-content').foundation();
});
});
});
},
setData: function(selectClass) {
var visItems = new vis.DataSet(),
visContainer = document.getElementById('visualization'),
visOptions = {},
visTimeline = '';
$(selectClass).on('change', function(visItems, visContainer, visOptions, visTimelines) {
this.loadData(visItems, visContainer, visOptions, visTimelines);
});
}
}
$(document).ready(function() {
myTimelineVis.setData('select.implementation_schedule');
});
我正在尝试在页面加载时创建一个vis时间轴,然后在我的select更改时将数据加载到它上面(我有两个选择)。在页面加载时,我可以看到更改事件绑定到Chrome控制台中的两个选项,但实际选择更改没有任何反应,甚至没有错误。它就像它们不存在一样。
这是范围问题吗?
答案 0 :(得分:1)
对于jQuery,不会在Ajax调用中添加侦听器,而是在$(document).ready()中添加。它的工作方式与vanilla JavaScript不同。
如果动态更改了选择,则需要对硬编码选择器使用以下语法。选择器可以像“#myForm select”那样宽泛。没有必要使用变量。
$(document).on('change', '.selectClass', function(visItems, visContainer, visOptions, visTimelines) {
this.loadData(visItems, visContainer, visOptions, visTimelines);
});
});