JavaScript кросс-браузер Нажмите на элемент HTML DOM - PullRequest
4 голосов
/ 27 июля 2011

Доступна ли кросс-браузерная функция vanilla JavaScript, которая может инициировать событие click для элемента HTML DOM (включая элементы неформальной формы, такие как div)?

Ответы [ 4 ]

6 голосов
/ 27 июля 2011

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

Если бы все браузеры поддерживали одну модель (скажем, модель событий W3C), жизнь была бы приятной.Но они этого не делают.И не только это, некоторые браузеры отказываются реагировать на программные события так же, как «реальные» события.например, отправка события click с использованием displatchEvent по ссылке в Firefox не приведет к тому, что браузер перейдет по этой ссылке (но запустит прослушиватель onclick, если он есть).Большинство других браузеров будут следовать по ссылке.

IE не поддерживает dispatchEvent до версии 8 (возможно, 9 делает), он имеет fireEvent , который похож, но отличается.

HTML5 (который пока не является стандартом, может быть, никогда не будет) представил метод click для интерфейса HTMLElement , однако он еще не полностью реализован.и на него нельзя положиться.Скорее всего, его можно использовать для сред, в которых вы знаете или можете контролировать версии браузера, которые будут использовать страницу.

Вы также можете просто вызвать свойство onclick элемента, если назначен слушательв собственность или в строку, но, конечно, это не похоже на реальное событие.

Полезное сообщение о dispatchEvent на clj .

4 голосов
/ 27 июля 2011
var target = document;//<--(insert your target here);
if(document.createEvent){
  var clickEvent = document.createEvent("MouseEvents");
  clickEvent.initMouseEvent("click", true, true, window, 
    0, 0, 0, 0, 0, false, false, false, 0, null);
  target.dispatchEvent(clickEvent);
}
else{
  target.fireEvent("onclick");
}

Взято из MDC event.initMouseEvent, ссылка и этот вопрос SO .

jsFiddle , который можно проверить на разныхбраузеры.

2 голосов
/ 27 июля 2011

Нашел эту неуловимую функцию в документации Mozilla: https://developer.mozilla.org/En/DOM/Document.createEvent, и здесь тоже: http://javascript.gakaa.com/document-createevent-4-0-5-.aspx

function performClick(node) {
    var evt = document.createEvent("MouseEvents");
    evt.initEvent("mousedown", true, true);
    document.getElementById("myElement").dispatchEvent(evt);
}
1 голос
/ 27 июля 2011

Дано:

<input type="button" id="myButton" onclick="alert('hello world');"/>

Следующее вызовет приглашение hello world:

document.getElementById("myButton").click();
...