微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jquery – 如何将事件与一个对象相关联? jqplot

我使用jqplot绘制一些图表.它是一个很棒的工具,但它缺少每个图表的简单clickhandler选项.

它的插件如荧光笔,可拖动和光标通过将自己添加到jqplot.eventListenerHooks(eventListenerHooks.push([‘jqplotClick’,callback]);例如.或’jqplotMouseDown’来注册他们对从jqplot画布捕获点击/鼠标事件的兴趣.或者也可以这样.

用通常的$.jqplot(目标,数据,选项)制作我的情节后;
然后我这样做

$.jqplot.eventListenerHooks.push([‘jqplotClick’,myFunc]);

肯定的是,无论我点击情节,使用事件,邻居,数据和网格,我都可以调用myFunc.邻居是最有趣的,它包含我的数据点,如果点击它.这是我需要使用数据点上的附加信息使弹出窗口靠近gridpos所需的数据.

但问题是,如果我在同一页面上有两个图表,并希望为每个jqplot注册不同的回调.就像现在一样,当我注册第二个myFunc2时,第二个绘图上的所有点击都会通过myFunc!

我是否需要对jqplot进行更改?任何方向,无论如何?

谢谢

解决方法

这没有详细记录,但你可以找到关于它的讨论 here.

基本上,在调用jqplot创建实际图表之前,需要为图表创建事件处理程序.要做到这一点,你需要做这样的事情:

var handler = function(ev,gridpos,datapos,neighbor,plot) {
    if (neighbor) {
        alert('x:' + neighbor.data[0] + ' y:' + neighbor.data[1]);
    }
};

$.jqplot.eventListenerHooks.push(['jqplotClick',handler]);

这只是一个简单的事件处理程序,它检查是否在您单击的位置附近有一个邻近的数据点.请参见此处的工作示例:http://jsfiddle.net/andrewwhitaker/PtyFG/

更新:如果您只想收听某个地块上的事件,您可以执行以下操作:

var handler = function(ev,plot) {
    if (plot.targetId === "#chartdiv") {
        if (neighbor) {
            alert('x:' + neighbor.data[0] + ' y:' + neighbor.data[1]);
        }
    }
    else if (plot.targetId === "#chart2div") {
        ....
    }
    // etc...
};

在哪里你可以用你希望收听事件的图表的ID代替#chartdiv.该示例已更新.

更新2:看起来您可以将常规绑定事件与plot事件一起使用:

$("#chartdiv").bind("jqplotClick",function(ev,neighbor) {
    if (neighbor) {
        alert('x:' + neighbor.data[0] + ' y:' + neighbor.data[1]);
    }
});

使用此方法的示例,带有2个图表:

http://jsfiddle.net/andrewwhitaker/PtyFG/5/

希望有所帮助!

原文地址:https://www.jb51.cc/jquery/175650.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐