jquery - 触发 mousedown 并在事件中包含 e.which

标签 jquery html css highcharts eventtrigger

我正在使用 highcharts 和 jquery。我没有使用正常的图例系统来显示我的系列名称,而是使用自己的 ul 填充了包含数据系列名称和信息的 li

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

我还在做的是让用户单击 highcharts 图中的线以选择系列列表中的 li 元素。

问题:例如,我想按住控件并单击图表中的两个或多个数据系列以在列表中突出显示这些系列。

我可以通过点击图表中的系列来触发 li click 事件,但是按住 ctrlshift 什么都不做。那么如何将“e.which”发送到我在其他地方触发的事件呢?

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

这是highcharts中触发li点击事件的点击事件。我没有忘记 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 的问题,但我只是不明白如何解决这个问题

提前致谢

最佳答案

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

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

关于jquery - 触发 mousedown 并在事件中包含 e.which,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30391431/

相关文章:

javascript - 为什么 colorbox 在 asp.net 按钮 OnClientClick 事件上立即关闭

php - 使用 PHP 和 jQuery 使用单选按钮进行测验

jquery - JQGrid - OndblClickRow 事件按所选行选择字段值

javascript - 如何在任何网站上更改标签值

javascript - 使用事件监听器捕获变量

css - Bootstrap 粘性页脚代码在高度和填充之间发生冲突

javascript - 更改 <img src ="XXX"/>,新图像完成加载时的 js 事件?

javascript - Jquery点击事件没有被触发

html - 随着浏览器窗口的增加,随时保持横幅响应

jquery - 如何在不再触发其悬停事件时隐藏此导航菜单?