【问题标题】:Trigger change on selecting dataset [Amcharts Multiple Data Sets chart]选择数据集时触发更改 [Amcharts 多数据集图表]
【发布时间】:2014-10-25 12:17:39
【问题描述】:

是否可以在他们提供的 amcharts 多数据集图表的 select 元素上触发“更改”?

$(".amChartsDataSetSelector").find("select").val("2").trigger("change");

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

此方法是否有任何其他替代方法

这是我的fiddle

这是 amcharts 图表上的original link

【问题讨论】:

    标签: javascript jquery charts amcharts


    【解决方案1】:

    The jQuery .trigger( works only when events are bound using jQuery .on function (or any event binding function). 下面是一个简单的例子来告诉你发生了什么。

    跳到下面的#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();
      });
    });
    <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>

    解决方案:

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

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

    然后用下面的fireEvent函数代替trigger('change')触发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);
        }
    }
    

    Fixed jsFiddle

    【讨论】:

    • 完美运行。但是您能否对 fireEvent 函数的作用进行说明?谢谢
    • @NevinMadhukarK 很高兴它对你有用。 fireEvent 只是一个使用原生 API (addEventListener/attachEvent) 触发事件绑定的函数。查看函数上方的 SO 链接 stackoverflow.com/a/2490876/297641 了解更多信息。
    • 我会在我的项目中实现这个,并且会接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多