Как имитировать клик с помощью JavaScript?

Мне просто интересно, как я могу использовать JavaScript для имитации щелчка по элементу.

В настоящее время у меня есть:

<script type="text/javascript">
function simulateClick(control)
{
    if (document.all)
    {
        control.click();
    }
    else
    {
        var evObj = document.createEvent('MouseEvents');
        evObj.initMouseEvent('click', true, true, window, 1, 12, 345, 7, 220, false, false, true, false, 0, null );
        control.dispatchEvent(evObj);
    }
}
</script>

<a href="#" onclick="location.href='http://www.google.com'; return false;" id="mytest1">test 1</a><br>

<script type="text/javascript">
    simulateClick(document.getElementById('mytest1'));
</script>

Но он не работает: (

Любые идеи?

Ответы

Ответ 1

Вот что я приготовил. Это довольно просто, но он работает:

function eventFire(el, etype){
  if (el.fireEvent) {
    el.fireEvent('on' + etype);
  } else {
    var evObj = document.createEvent('Events');
    evObj.initEvent(etype, true, false);
    el.dispatchEvent(evObj);
  }
}

Использование:

eventFire(document.getElementById('mytest1'), 'click');

Ответ 2

Как насчет чего-то простого:

document.getElementById('elementID').click();

Поддерживается даже IE.

Ответ 3

Рассматривали ли вы использование jQuery, чтобы избежать обнаружения браузера? С jQuery это было бы так же просто, как:

$("#mytest1").click();

Ответ 4

Вы можете сэкономить кучу пространства, используя jQuery. Вам нужно всего лишь использовать:

$('#myElement').trigger("click")

Ответ 5

var elem = document.getElementById('mytest1');

// Simulate clicking on the specified element.
triggerEvent( elem, 'click' );

/**
 * Trigger the specified event on the specified element.
 * @param  {Object} elem  the target element.
 * @param  {String} event the type of the event (e.g. 'click').
 */
function triggerEvent( elem, event ) {
  var clickEvent = new Event( event ); // Create the event.
  elem.dispatchEvent( clickEvent );    // Dispatch the event.
}

Ссылка

Ответ 6

Лучший ответ - лучший! Тем не менее, он не запускал события мыши для меня в Firefox, когда etype = 'click'.

Итак, я изменил значение document.createEvent на 'MouseEvents' и устранил проблему. Дополнительный код предназначен для проверки того, вмешивался ли какой-либо бит кода в событие, и если он был отменен, я бы зарегистрировал его для консоли.

function eventFire(el, etype){
  if (el.fireEvent) {
    el.fireEvent('on' + etype);
  } else {
    var evObj = document.createEvent('MouseEvents');
    evObj.initEvent(etype, true, false);
    var canceled = !el.dispatchEvent(evObj);
    if (canceled) {
      // A handler called preventDefault.
      console.log("automatic click canceled");
    } else {
      // None of the handlers called preventDefault.
    } 
  }
}

Ответ 7

Я использую свой мобильный телефон и SKYPE для звонков. Это моя стихия, которая скрыта от глаз...

<a id=call href="tel:<?=$phone?>"><?=$phone?></a>

Элемент скрыт от просмотра при загрузке с помощью... var call = document.getElementById("call"); call.style.display = "нет";

Эта линия ванильного JavaScript работает на меня, когда я использую свой мобильный телефон...

var x = document.getElementById('call').click();

Если бы я использовал SKYPE, я бы изменил "tel" на "callto" и ничего больше...

<a id=call href="callto:<?=$phone?>"><?=$phone?></a>

от Боба Страттона