jQuery .on更改事件绑定但不激活

时间:2016-08-23 17:10:45

标签: javascript jquery

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控制台中的两个选项,但实际选择更改没有任何反应,甚至没有错误。它就像它们不存在一样。

这是范围问题吗?

1 个答案:

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