触发mousedown并在事件

时间:2015-05-22 08:04:31

标签: jquery html css highcharts eventtrigger

我使用highcharts和jquery。我没有显示系列名称的普通图例系统,而是让我自己的ul填充li,其中包含数据系列名称和信息。

我使用jquery ui .draggable()模拟此列表中的桌面文件夹行为,以及一些用于监听用户持有ctrlshift的自定义事件。 (用于一次选择和取消选择多个列表元素)

我还要做的是让用户点击高图图表中的一行,选择系列列表中的li元素。

问题:我想举例来说,按住控件并点击图表中的两个或多个数据系列,以突出显示列表中的那些系列。

我可以点击图表中的系列来触发li click event,但按住ctrlshift不会做任何事情。那么我该如何发送" e.which"我在其他地方触发的事件?

我有很多代码,所以我只发布最相关的内容。要求澄清。

这是触发li click event的高级图表中的点击事件。我还没有忘记mouseup事件,我还没有忘记它

click: function (event) {
$(newDisplay).find('.destination li[data-description="' + this.name + '"]').trigger('mousedown', [event])
},'

这是整个li mousedownmouseup事件

    var targetArea, lastClicked,
        slct = 'ui-selected',
        slctC = '.ui-selected';

    if (!parameterTarget)
    { targetArea = '.lnSeries'; }
    else
    { targetArea = parameterTarget; }

    $(targetArea)
        .off()
        .on('mousedown', 'li', function (e) {
            if (e.ctrlKey || e.metaKey) {
                if ($(this).hasClass(slct)) {
                    $(this).removeClass(slct);
                    lastClicked = null;
                }
                else {
                    $(this).addClass(slct);
                    lastClicked = $(this)
                }

            } else if (e.shiftKey) {
                if ($(slctC).length == 0) {
                    lastClicked = $(this);
                }

                if ($(this).index() > $(lastClicked).index()
                    && $(this).siblings().is(lastClicked)) {

                    $(lastClicked).nextUntil($(e.target).next()).addBack().addClass(slct);
                } else if ($(this).index() < $(lastClicked).index()
                    && $(this).siblings().is(lastClicked)) {

                    $(lastClicked).prevUntil($(e.target).prev()).addBack().addClass(slct);

                } else {
                    lastClicked = $(this)
                    $(this).addClass(slct);
                }

            } else {
                lastClicked = $(e.target);
                if (!($(this).hasClass(slct))) {
                    $(slctC).removeClass(slct);
                    $(this).addClass(slct);
                }
            }

            infoTable();

        })
        .on('mouseup', 'li', function (e) {
            if (($(slctC).length > 1) && !(e.ctrlKey || e.shiftKey || e.metaKey)) {
                $(slctC).removeClass(slct);
                $(this).addClass(slct);
            } else if ($(slctC).length == 1) {

            }

        })

我确定这是我e的问题,但我不明白如何处理此问题

提前致谢

1 个答案:

答案 0 :(得分:1)

您应该使用目标处理程序内的trigger方法传递的数据。这是你可以这样做的方式,但不确定它是否适用于你的情况:

$(targetArea)
    .off()
    .on('mousedown', 'li', function (e, data) {
       e = data || e;
        // all rest of logic there...
    });