Как вызвать несколько событий щелчка мышью на произвольном количестве элементов HTML, перекрывающих друг друга?
Я знаю, что вы можете использовать pointer-events: none;, чтобы ваш щелчок проходил через ваши элементы, но что, если я хочу вызвать событие щелчка мыши на элементе А ТАКЖЕ событие щелчка мыши на произвольно многих других элементах под ним?
Уточнение: в моем случае у меня есть svg с несколькими перекрывающимися элементами дочернего пути, которые определяют различные многоугольники; все элементы пути являются братьями и сестрами друг друга - вложения между ними не происходит. Я хочу щелкнуть произвольный элемент пути, который, как правило, будет перекрывать один или несколько элементов одноуровневого пути и тем самым запускать (как правило) любое событие мыши, которое было бы инициировано, если бы этот путь был единственным элементом. (Подумайте, щелкнув по фигурам Техаса и США, где я хочу заполнить два ярлыка - «Техас», «США» - одним щелчком мыши по Техасу.)






Решением может быть отслеживание движения мыши с помощью:
$( document ).mousemove();
Сохраните координаты в глобальной переменной, а затем проверьте ее положение при щелчке по вашему элементу. Это даст что-то вроде:
var mousePos = [0,0];
$( document ).mousemove(function( event ) {
mousePos[0] = event.pageX
mousePos[1] = event.pageY
});
$("#target").click(function(){
// Compare mouse coordinates and your items ones using offset, height and width
if (mousePos[0] > $('#target2').offset.left){
// Do whatever you are willing to do
}
});
but what if I want to trigger the mouse-click event on an element AND the mouse-click event on arbitrarily many other elements beneath it?
Пузырь событий. Это означает и событие, запущенное на внутреннем элементе, также будет получено родительскими элементами до самого верхнего родительского элемента.
<div id = "topmost">
<div id = "second">
<p id = "firstp"></p>
</div>
</div>
Предположим, вы используете jquery. Ниже показано, как вы будете прослушивать события щелчка из всех элементов ниже div.id = "topmost".
Поскольку нормальный поток событий предназначен для любого события щелчка (может быть событие любого другого типа), которое запускается любым элементом с в самом верхнем элементе div, будет перемещаться к самому внешнему элементу, я перечисляю только самое верхнее событие щелчка, а затем проверяю какой элемент вызвал это событие, проверив идентификатор целевого элемента. e.target будет фактическим элементом, по которому был выполнен щелчок. Вы можете либо переключить target.attr ('id'), либо пропустить его, если условия else.
$(function () {
$("#topmost").on("click", function (e) {
e.preventDefault();
var target = $(e.target);
if (target.attr('id') === "idOfElement"){
// code to handle the event
}else{
});
Находятся ли элементы в одном дом-узле? Если да, примените onClick к общему родителю. Если нет, вам придется отслеживать положение мыши и сравнивать с элементами все. Дальнейший вопрос. Вы хотите просмотреть? Итак, если две кнопки пересекаются, и вы нажмете одну, сработает ли та, что ниже, которую вы нажали, если бы та, которую вы на самом деле нажали, не сработала? Или только первое попадание?