选择数据集时触发更改[Amcharts Multiple Data Sets chart]

Nev*_*r K 5 javascript jquery charts amcharts

是否有可能触发他们提供的amcharts多数据集图表的select元素的'更改'.

$(".amChartsDataSetSelector").find("select").val("2").trigger("change");
Run Code Online (Sandbox Code Playgroud)

这是我试过的代码,它的作用基本上是将选择选项更改为我选择的选项,但它不会相应地更改图表.

这种方法还有其他替代方案吗?

这是我的小提琴:

这是amcharts图表的原始链接.

Sel*_*gam 2

仅当使用 jQuery函数(或任何事件绑定函数).trigger(绑定事件时,jQuery才起作用。.on下面是一个简单的示例,向您展示发生了什么。

跳转到下面的#Solution 以跳过此演示。

$(function() {
  var el = document.getElementById('checkEvent');
  if (el.addEventListener) {
    el.addEventListener("change", checkEvent, false);
  } else {
    el.attachEvent('change', checkEvent);
  }

  function checkEvent() {
    alert('Event Check');
  }

  $('#changeDDValue').click(function() {
    $('#checkEvent').val("2").change();
  });
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<select id="checkEvent" style="width: 180px;">
  <option value="0">first data set</option>
  <option value="1">second data set</option>
  <option value="2">third data set</option>
  <option value="3">fourth data set</option>
</select>
<button id="changeDDValue">Change DataSet</button>
Run Code Online (Sandbox Code Playgroud)

解决方案:

添加了一个按钮#change来设置不同的数据集,如下所示,

$('#change').click(function () {
    var selectEl = $(".amChartsDataSetSelector").find("select").val("2").get(0);
    fireEvent.call(selectEl, 'change');
});
Run Code Online (Sandbox Code Playgroud)

然后使用下面的 fireEvent 函数来触发更改事件而不是trigger('change'),

//http://stackoverflow.com/a/2490876/297641
function fireEvent(eventName) {
    var event; // The custom event that will be created

    if (document.createEvent) {
        event = document.createEvent("HTMLEvents");
        event.initEvent(eventName, true, true);
    } else {
        event = document.createEventObject();
        event.eventType = eventName;
    }

    event.eventName = eventName;

    if (document.createEvent) {
        this.dispatchEvent(event);
    } else {
        this.fireEvent("on" + event.eventType, event);
    }
}
Run Code Online (Sandbox Code Playgroud)

修复了 jsFiddle