Можно ли диспетчерироватьEvent () щелчком мыши по элементу <input type = text>? - PullRequest
16 голосов
/ 18 марта 2011

В основном я пытаюсь отправить пользовательское событие щелчка мыши на элемент ввода текста, используя следующий код (см. jsFiddle ):

function simulateClick(id) {
    var clickEvent = document.createEvent("MouseEvents");
    clickEvent.initMouseEvent("click", true, true, window, 1, 0, 0, 0, 0,
        false, false, false, false, 0, null);

    var element = document.getElementById(id);
    element.dispatchEvent(clickEvent);
}

Когда я запускаю этот код для элемента type="checkbox", он прекрасно работает, но не работает вообще, когда вызывается для элемента type="text".

Теперь вот определение initMouseEvent() в MDN:

event.initMouseEvent(type, canBubble, cancelable, view, 
                 detail, screenX, screenY, clientX, clientY, 
                 ctrlKey, altKey, shiftKey, metaKey, 
                 button, relatedTarget);

Таким образом, в приведенном выше примере screenX, screenY, clientX и clientY будут равны 0 (тем не менее, приведенный выше код прекрасно работает с флажками независимо от их положения). Я попытался захватить реальное событие и передать экран и координаты клиента в событие, сделанное клиентом, но безрезультатно.

Хотя, возможно, элементы ввода текста игнорируют пользовательские события мыши по соображениям безопасности, но тогда element.focus() также не должен работать, что он делает.

Любые идеи или идеи будут с благодарностью!

1 Ответ

5 голосов
/ 18 марта 2011

Насколько я могу судить, ваш код работает нормально. Однако он не фокусирует поле ввода, как вы думаете, но событие запускается в поле ввода просто отлично, как видно из этой скрипки: http://jsfiddle.net/ENvZY/

Примечание: код не является кроссбраузерным, однако он не работает в ie8.

Подумайте об использовании хорошей кросс-браузерной библиотеки, такой как jQuery, вместо того, чтобы идти по собственному пути DOM - колесо существует и работает отлично, изобретать его - пустая трата времени:)

...