简体   繁体   English

jQuery .on更改事件绑定但不触发

[英]jQuery .on change event binding but not firing

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');
});

I am trying to trying to create a vis timeline on page load and then load data onto it when my select changes (I have two selects). 我试图在页面加载时创建一个vis时间轴,然后在我的选择更改时将数据加载到它(我有两个选择)。 On page load, I can see the change event binding to both selects within Chrome console, but nothing happens, not even an error, on the actual select change. 在页面加载时,我可以看到在Chrome控制台中将更改事件绑定到两个选择,但是在实际选择更改上什么也没有发生,甚至没有错误。 It just acts like they don't exist. 就像它们不存在一样。

Is this is a scope issue? 这是范围问题吗?

For jQuery, the listener would not be added in an Ajax call, but in the $(document).ready(). 对于jQuery,侦听器不会添加到Ajax调用中,而是添加到$(document).ready()中。 It works differently than vanilla JavaScript. 它的工作方式不同于普通JavaScript。

If the select is dynamically changed you would need to use the following syntax with a hard-coded selector. 如果选择是动态更改的,则需要对硬选择器使用以下语法。 The selector can be broad like "#myForm select". 选择器可以像“ #myForm select”一样广泛。 There's no need to use a variable. 无需使用变量。

 $(document).on('change', '.selectClass', function(visItems, visContainer, visOptions,       visTimelines) {
            this.loadData(visItems, visContainer, visOptions, visTimelines);
        });
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM