Как я могу программно вызвать onclick () событие от тега привязки при хранении 'этой' ссылки в функции onclick?

Следующее не работает... (по крайней мере, не в Firefox: document.getElementById('linkid').click() не функция),

<script type="text/javascript">
    function doOnClick() {
        document.getElementById('linkid').click();
        //Should alert('/testlocation');
    }
</script>
<a id="linkid" href="/testlocation" onclick="alert(this.href);">Testlink</a>
79
задан Brian Tompsett - 汤莱恩 19 August 2019 в 09:43
поделиться

3 ответа

Вам необходимо применить обработчик событий в контексте этого элемента:

var elem = document.getElementById("linkid");
if (typeof elem.onclick == "function") {
    elem.onclick.apply(elem);
}

В противном случае this будет ссылаться на контекст приведенный выше код выполняется в.

106
ответ дан 24 November 2019 в 10:13
поделиться

Чтобы вызвать событие, вы просто вызываете обработчик этого события элемент. Небольшое изменение в вашем коде.

var a = document.getElementById("element");
var evnt = a["onclick"];

if (typeof(evnt) == "function") {
    evnt.call(a);
}
15
ответ дан 24 November 2019 в 10:13
поделиться

Если вы используете это только для ссылки на функцию в onclick, это кажется очень плохой идеей. В целом встроенные события - плохая идея.

Я бы посоветовал следующее:

function addEvent(elm, evType, fn, useCapture) {
    if (elm.addEventListener) {
        elm.addEventListener(evType, fn, useCapture);
        return true;
    }
    else if (elm.attachEvent) {
        var r = elm.attachEvent('on' + evType, fn);
        return r;
    }
    else {
        elm['on' + evType] = fn;
    }
}

handler = function(){
   showHref(el);
}

showHref = function(el) {
   alert(el.href);
}

var el = document.getElementById('linkid');

addEvent(el, 'click', handler);

Если вы хотите вызвать ту же функцию из другого кода javascript, имитация щелчка для вызова функции - не лучший способ. Рассмотрим:

function doOnClick() {
   showHref(document.getElementById('linkid'));
}
0
ответ дан 24 November 2019 в 10:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: