触发 mousedown 并在事件中包含 e.which
Trigger mousedown and include e.which in the event
我正在使用 highcharts 和 jquery。我没有使用正常的图例系统来显示我的系列名称,而是我自己的 ul
填充了 li
,其中包含数据系列名称和信息。
我正在使用 jquery ui .draggable()
和一些监听用户持有 ctrl
或 [=17 的自定义事件来模拟此列表中的桌面文件夹行为=]. (用于一次 selecting 和 deselecting 多个列表元素)
我也在做的是让用户点击 highcharts 图表中的线到 select 系列列表中的 li
元素。
问题:例如,我想按住控件并单击图表中的两个或多个数据系列以在列表中突出显示这些系列。
我可以通过点击图表中的系列来触发 li click event
,但是按住 ctrl
或 shift
没有任何作用。那么如何将 "e.which" 发送到我在其他地方触发的事件?
我有很多代码,所以我只 post 最相关的东西。问清楚。
这是触发 li click event
的 highcharts 中的点击事件。我没有忘记 mouseup
活动,我只是还没想起来
click: function (event) {
$(newDisplay).find('.destination li[data-description="' + this.name + '"]').trigger('mousedown', [event])
},'
这是整个里mousedown
和mouseup
事件
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...
});
我正在使用 highcharts 和 jquery。我没有使用正常的图例系统来显示我的系列名称,而是我自己的 ul
填充了 li
,其中包含数据系列名称和信息。
我正在使用 jquery ui .draggable()
和一些监听用户持有 ctrl
或 [=17 的自定义事件来模拟此列表中的桌面文件夹行为=]. (用于一次 selecting 和 deselecting 多个列表元素)
我也在做的是让用户点击 highcharts 图表中的线到 select 系列列表中的 li
元素。
问题:例如,我想按住控件并单击图表中的两个或多个数据系列以在列表中突出显示这些系列。
我可以通过点击图表中的系列来触发 li click event
,但是按住 ctrl
或 shift
没有任何作用。那么如何将 "e.which" 发送到我在其他地方触发的事件?
我有很多代码,所以我只 post 最相关的东西。问清楚。
这是触发 li click event
的 highcharts 中的点击事件。我没有忘记 mouseup
活动,我只是还没想起来
click: function (event) {
$(newDisplay).find('.destination li[data-description="' + this.name + '"]').trigger('mousedown', [event])
},'
这是整个里mousedown
和mouseup
事件
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...
});