DOM initMouseEvent clientX, clientY

как можно имитировать событие onclick на DIV, передавая только координаты X, Y ???

Если я попытаюсь сделать это очевидным, функция dispatchEvent хочет объект, на котором будет вызвано событие ... но тогда каков смысл передачи при создании события координат ????

Спасибо

Ответов (1)

Решение

Параметры clientX и clientY - это позиция относительно элемента, обрабатывающего событие , поэтому вам необходимо знать, к какому элементу относится событие щелчка.

Если вы хотите смоделировать щелчок по неизвестному элементу на основе координат окна, вам нужно будет найти элемент в этой позиции. В IE и Firefox 3 вы можете использовать document.elementFromPoint(x, y) . Я не знаю другого способа в других браузерах, кроме как перебирать элементы на странице, глядя на их положение / размер, чтобы определить, что находится в координатах.

Ваш код будет выглядеть примерно так:

function simulateClick(x, y) {
    var el = getElementFromPoint(x, y);

    var evt = document.createEvent("MouseEvents");
    evt.initMouseEvent("click", true, true, window,
        1, 0, 0,
        calculateClientX(el, x), calculateClientY(el, y),
        false, false, false, false, 0, null);

    el.dispatchEvent(evt);
}

getElementFromPoint будет использовать любой document.elementFromPoint или перебирать все элементы. calculateClientX/Y вычислит координаты щелчка относительно элемента.